小生博客:http://xsboke.blog.51cto.com

   



                                -------谢谢您的参考,如有疑问,欢迎交流


一、 Apache优化:工作模式

   Apache2.4版本有三个模式,preforkworkerevent,而在apache2.4版本之前没有event工作模

   式,查看工作模式:httpd  -V

  1. 线程与进程的区别

    l  进程:维护程序所需资源,不处理用户的请求

    l  线程:处理应用所需要完成的操作,在此也就是处理用户的请求

    l  一个程序至少有一个进程,一个进程至少有一个线程

    l  进程在执行过程中有独立的内存单元,而线程共享进程的内存单元

  2. Prefork工作模式

    l  Prefork首先创建多个子进程,然后每个子进程只有一个线程,通过线程处理客户端请求,所以prefork每个进程只能处理一个请求

    l  优点:Prefork适用于对稳定性和效率要求较高的生产环境,因为每个线程都独享一个进程

    l  缺点:在处理多并发高负载时,prefork工作模式将占用大量的内存

例:配置prefork工作模式

       Prefork参数配置:httpd-mpm.conf

       apache2.4:参数优化(一)_第1张图片


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



       Apache的主配置文件:httpd.conf

       wKiom1jqIbaQzJvhAAEjGGiBfxs324.jpg

       wKiom1jqIcvzxwkTAABse1Yl5rY152.jpg

       重启apache服务,并查看工作模式

       apache2.4:参数优化(一)_第2张图片

3. Worker工作模式

  l  Worker首先创建多个子进程,然后每个子进程创建多个线程,一个线程可以处理一个请求,所以

   worker工作模式中一个子进程可以处理多个请求

  l  优点:适用于高并发的生产环境,因为线程是共享子进程的内存的,所以内存占用较少

  l  缺点:如果一个线程出现问题,也会导致同一子进程下的其他线程出现问题

  例:配置worker工作模式

    worker参数配置:httpd-mpm.conf

   apache2.4:参数优化(一)_第3张图片


    • ThreadsPerChildworker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值64如果需要设置为64以上,那就需要在这个参数前添加ThreadLimit参数,它的最大缺省值20000

    • WorkerMaxRequestWorkers参数和perforkMaxRequestWorkers参数一样,如果需要设置

      256以上,则在这个参数前还需要添加参数ServerLimit并且指定最大请求子进程数


   Apache的主配置文件:httpd.conf

   wKioL1jqIh6jqY4gAADXjgn7s1U755.jpg

   wKiom1jqIirASwVdAABsegmCC7Q443.jpg

   重启httpd服务,并且查看工作模式

   apache2.4:参数优化(一)_第4张图片

4. Event模式

  l  Event就是worker模式的变种,他解决的keep-alive长连接的时候占用线程资源被浪费的问题,

   在event模式中会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时

   候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处

   理。

  l  缺点:event模式不能很好的支持https的访问(HTTP认证相关的问题)。

二、 Apache优化:配置参数

  wKiom1jqJGLARnowAABdgE-pjTU254.png

三、 Apache优化:开启Gzip压缩传输

  • Gzip的模版名叫mod_deflate,使用此功能必须安装此模版

  • Gzip压缩可以将响应的数据压缩,以降低带宽占用,比如一个100KB的文件压缩成10KB进行传输

  • 设置压缩比率,取值范围在 1(最低) 9(最高)之间,不建议设置太高,虽然有很高的压缩率,但是占用更多的CPU资源

未使用Gzip压缩时

apache2.4:参数优化(一)_第5张图片

使用Gzip压缩后

apache2.4:参数优化(一)_第6张图片

压缩传输需要的模版:mod_deflate.somod_headers.so

wKioL1jqJLSDp7JBAAB4Um3NzpM939.jpg

  1. 安装压缩传输需要的模版

    l  可以使用DSO方式安装,上面已经讲解过安装方法,这里不再复述

    l  在生产环境中,因为是动态安装的模版,安装模版后,最好使用httpd的优雅启动去重新加载配置,这样不会影响httpd服务的运行

apache2.4:参数优化(一)_第7张图片

 2. 修改httpd.conf配置文件

   启用deflateheaders模版

   为了方便调用libz.so

   执行命令:ln -s  /usr/local/zlib/lib/libz.so  /usr/lib/

   wKiom1jqJQGDS4XxAADvoEw5KoU127.jpg

   添加压缩传输的相关代码

   apache2.4:参数优化(一)_第8张图片

   还可以设置日志输出:就是将输入输出的流量记录到日志(生产环境一般不用)

   wKiom1jqJTLhKFZsAACtFfpibro467.jpg

   重启httpd服务

   wKioL1jqJUOC02sBAAAUGbe57xE816.png

 3. 测试

   首先在存放网页的目录下创建两个文件,一个.png文件(不进行压缩传输),一个.php文件(进行

   传输压缩)

   本例使用的是QQ浏览器

   首先访问png结尾的图片

   apache2.4:参数优化(一)_第9张图片

   访问php网页

   apache2.4:参数优化(一)_第10张图片

   通过查看日志验证

   wKiom1jqJamDYa0hAACMD9Paf_o339.jpg

四、 Apache优化:expires缓存

   Mod_expires模块可以通过在客户机上缓存,减少20%-30%左右的重复请求

   1. 首先查看未启用时的应答报文

   apache2.4:参数优化(一)_第11张图片

   2. 启用expires模块

     修改httpd.conf配置文件,启用expires模版。并且添加expires配置规则

     apache2.4:参数优化(一)_第12张图片

     apache2.4:参数优化(一)_第13张图片

   ExpiresByType命令格式:

   ExpiresByType   type/encoding  "   [plus]  { }"

 解释:

  • type/encoding:类型/编码

  • :指定缓存时间以什么为起点,accessnow是以客户机的访问时间为起点,modification是以此文件的修改时间为起点

  • Plus:关键字,可选:指定缓存时长,必须是整数:缓存时长的单位,常用有month(月)、weeks(周)、days(天)、hours(小时)、minutes(分钟)、seconds(秒)、years(年)

  • Access可以写为A时间长可以以秒计并且不添加时长单位,如:ExpiresByType    image/gif   A2592000

  3. 重启httpd服务,并且进行验证

   wKiom1jqKBzij40OAAA62SZlje4404.jpg

    通过curl命令获取响应头部

   apache2.4:参数优化(一)_第14张图片

五、 apache优化:禁止目录遍历

   当找不当某个web服务器的页面时,浏览器将会遍历整个web目录,并且显示,这样是极不安全的


   没有禁止遍历目录前

   wKioL1jqKOaxDWWtAABhMeoIqtc449.jpg

   apache2.4:参数优化(一)_第15张图片

   1. 修改httpd主配置文件,禁止目录遍历

    apache2.4:参数优化(一)_第16张图片

    2. 重启服务,并且进行测试


    wKiom1jqKT_zz1TkAAAwl4kEhBc336.jpg

    apache2.4:参数优化(一)_第17张图片

六、 Apache优化:在应答首部中隐藏版本信息

    未隐藏前

    apache2.4:参数优化(一)_第18张图片

    在应答报文中包含程序名及其版本号,是极不安全的,这很有可能成为***者的一个机会

  1. 隐藏版本号

   apache安装后,就只能隐藏版本号了,程序名是隐藏不了的

   现在我们隐藏版本号


   首先修改模版文件:htttpd-default.conf文件

   apache2.4:参数优化(一)_第19张图片

   然后修改httpd.conf配置文件

   wKioL1jqKdajK8SPAACfTFrZqrQ723.jpg

   重启httpd服务,使配置生效

   wKioL1jqKeWiA-eIAAATVH2Ipsg860.png

   然后再次查看相应报文,发现server只标识了程序名,版本号被隐藏

   apache2.4:参数优化(一)_第20张图片

  2. 自定义程序名和版本号

   必须在编译安装apache前,通过修改源码文件,才能实现隐藏程序名

   首先修改源码包include目录下的ap_release.h文件

   apache2.4:参数优化(一)_第21张图片

   将这些值修改为自己想要的值,然后再编译安装,应答报文里面的程序名及其版本号就彻底改

   变

   我将这些值修改为:

   apache2.4:参数优化(一)_第22张图片

   然后编译安装,访问web服务器,发现响应报文不再显示真正的程序名和版本号

   apache2.4:参数优化(一)_第23张图片