设为首页 收藏本站
查看: 1589|回复: 0

[经验分享] apache2.4:参数优化(一)

[复制链接]
发表于 2018-11-27 09:39:57 | 显示全部楼层 |阅读模式
  小生博客:http://xsboke.blog.51cto.com
  小生 Q Q:1770058260
  

  

  -------谢谢您的参考,如有疑问,欢迎交流
  一、 Apache优化:工作模式
   Apache2.4版本有三个模式,prefork、worker、event,而在apache2.4版本之前没有event工作模
   式,查看工作模式:httpd  -V

  •   线程与进程的区别
      l  进程:维护程序所需资源,不处理用户的请求
      l  线程:处理应用所需要完成的操作,在此也就是处理用户的请求
      l  一个程序至少有一个进程,一个进程至少有一个线程
      l  进程在执行过程中有独立的内存单元,而线程共享进程的内存单元
  •   Prefork工作模式
      l  Prefork首先创建多个子进程,然后每个子进程只有一个线程,通过线程处理客户端请求,所以prefork每个进程只能处理一个请求
      l  优点:Prefork适用于对稳定性和效率要求较高的生产环境,因为每个线程都独享一个进程
      l  缺点:在处理多并发高负载时,prefork工作模式将占用大量的内存
例:配置prefork工作模式
  Prefork参数配置:httpd-mpm.conf
       DSC0000.jpg

  •   


    •   



    •   如果最大请求进程数超过256需要在MaxRequestWorkers参数前添加参数ServerLimit并且指定最大并发数,2.3.1以前的版本MaxRequestWorkers被称为MaxClients,现在依然支持这个参数。一般最大请求进程数设置为物理内存的1/2

  

  Apache的主配置文件:httpd.conf
       DSC0001.jpg
       DSC0002.jpg
         重启apache服务,并查看工作模式
       DSC0003.jpg
  3. Worker工作模式
    l  Worker首先创建多个子进程,然后每个子进程创建多个线程,一个线程可以处理一个请求,所以
  worker工作模式中一个子进程可以处理多个请求

    l  优点:适用于高并发的生产环境,因为线程是共享子进程的内存的,所以内存占用较少
    l  缺点:如果一个线程出现问题,也会导致同一子进程下的其他线程出现问题
    例:配置worker工作模式
  worker参数配置:httpd-mpm.conf
    DSC0004.jpg

  •   


    •   ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果需要设置为64以上,那就需要在这个参数前添加ThreadLimit参数,它的最大缺省值是20000
    •   Worker的MaxRequestWorkers参数和perfork的MaxRequestWorkers参数一样,如果需要设置
        为256以上,则在这个参数前还需要添加参数ServerLimit并且指定最大请求子进程数

  

  Apache的主配置文件:httpd.conf
    DSC0005.jpg
    DSC0006.jpg
     重启httpd服务,并且查看工作模式
    DSC0007.jpg
  4. Event模式
    l  Event就是worker模式的变种,他解决的keep-alive长连接的时候占用线程资源被浪费的问题,
     在event模式中会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时
     候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处
     理。
    l  缺点:event模式不能很好的支持https的访问(HTTP认证相关的问题)。
  二、 Apache优化:配置参数
   DSC0008.png
  三、 Apache优化:开启Gzip压缩传输

  •   Gzip的模版名叫mod_deflate,使用此功能必须安装此模版
  •   Gzip压缩可以将响应的数据压缩,以降低带宽占用,比如一个100KB的文件压缩成10KB进行传输
  •   设置压缩比率,取值范围在 1(最低) 到 9(最高)之间,不建议设置太高,虽然有很高的压缩率,但是占用更多的CPU资源
未使用Gzip压缩时
DSC0009.jpg
使用Gzip压缩后
DSC00010.jpg
压缩传输需要的模版:mod_deflate.so和mod_headers.so
DSC00011.jpg

  •   安装压缩传输需要的模版
      l  可以使用DSO方式安装,上面已经讲解过安装方法,这里不再复述
      l  在生产环境中,因为是动态安装的模版,安装模版后,最好使用httpd的优雅启动去重新加载配置,这样不会影响httpd服务的运行
DSC00012.jpg
   2. 修改httpd.conf配置文件
   启用deflate和headers模版
   为了方便调用libz.so
   执行命令:ln -s  /usr/local/zlib/lib/libz.so  /usr/lib/
    DSC00013.jpg
   添加压缩传输的相关代码
    DSC00014.jpg
   还可以设置日志输出:就是将输入输出的流量记录到日志(生产环境一般不用)
    DSC00015.jpg
   重启httpd服务
    DSC00016.png
   3. 测试
   首先在存放网页的目录下创建两个文件,一个.png文件(不进行压缩传输),一个.php文件(进行
   传输压缩)
   本例使用的是QQ浏览器
   首先访问png结尾的图片
    DSC00017.jpg
   访问php网页
    DSC00018.jpg
   通过查看日志验证
    DSC00019.jpg
四、 Apache优化:expires缓存
   Mod_expires模块可以通过在客户机上缓存,减少20%-30%左右的重复请求
     1. 首先查看未启用时的应答报文
    DSC00020.jpg
     2. 启用expires模块
  修改httpd.conf配置文件,启用expires模版。并且添加expires配置规则
      DSC00021.jpg
      DSC00022.jpg
  ExpiresByType命令格式:
  ExpiresByType   type/encoding  "   [plus]  { }"
  解释:

  •   type/encoding:类型/编码
  •   :指定缓存时间以什么为起点,access和now是以客户机的访问时间为起点,modification是以此文件的修改时间为起点
  •   Plus:关键字,可选:指定缓存时长,必须是整数:缓存时长的单位,常用有month(月)、weeks(周)、days(天)、hours(小时)、minutes(分钟)、seconds(秒)、years(年)
  •   Access可以写为A时间长可以以秒计并且不添加时长单位,如:ExpiresByType    image/gif   A2592000
    3. 重启httpd服务,并且进行验证
    DSC00023.jpg
    通过curl命令获取响应头部
    DSC00024.jpg
  五、 apache优化:禁止目录遍历
   当找不当某个web服务器的页面时,浏览器将会遍历整个web目录,并且显示,这样是极不安全的
  

     没有禁止遍历目录前
    DSC00025.jpg
    DSC00026.png
     1. 修改httpd主配置文件,禁止目录遍历
    DSC00027.jpg
    2. 重启服务,并且进行测试


DSC00028.jpg

DSC00029.jpg

  六、 Apache优化:在应答首部中隐藏版本信息
      未隐藏前
    DSC00030.png
    在应答报文中包含程序名及其版本号,是极不安全的,这很有可能成为***者的一个机会
    1. 隐藏版本号
  当apache安装后,就只能隐藏版本号了,程序名是隐藏不了的
   现在我们隐藏版本号


   首先修改模版文件:htttpd-default.conf文件
    DSC00031.jpg
   然后修改httpd.conf配置文件
    DSC00032.jpg
   重启httpd服务,使配置生效
    DSC00033.png
   然后再次查看相应报文,发现server只标识了程序名,版本号被隐藏
    DSC00034.png
    2. 自定义程序名和版本号
     必须在编译安装apache前,通过修改源码文件,才能实现隐藏程序名
   首先修改源码包include目录下的ap_release.h文件
    DSC00035.jpg
   将这些值修改为自己想要的值,然后再编译安装,应答报文里面的程序名及其版本号就彻底改
   变了
     我将这些值修改为:
      DSC00036.png
     然后编译安装,访问web服务器,发现响应报文不再显示真正的程序名和版本号
    DSC00037.jpg
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-640140-1-1.html 上篇帖子: qmail+rt+dns+apache 下篇帖子: 安装Apache提示缺少 libapr-1.so.0与libaprutil-1完美解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表