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

[经验分享] Linux Apache的深度优化及三种工作模式的讲解

[复制链接]

尚未签到

发表于 2018-11-17 10:40:00 | 显示全部楼层 |阅读模式
  在搭建 Apache 业务没上线之前,我们需要不断去测试性能以达到甚至远远超过预期,因此我们需要对 Apache 进行深度优化,本次我们将介绍 Apache 的优化及工作模式详解。

Apache 优化
  在 Linux 中搭建的 Apache ,要进行优化必须是在编译安装环境下进行,因此我们需要对本机自带的 httpd 进行卸载。并重新下载并编译安装。要注意,在./配置的时候,要添加以下模块。
  

./configure \  
--prefix=/usr/local/httpd \    ##安装目录
  
--enable-deflate \    ##压缩模块
  
--enable-expires \    ##缓存模块
  
--enable-so \
  
--enable-rewrite \     ##重定向模块
  
--enable-charset-lite \
  
--enable-cgi
  

一、配置压缩模块
  打开主配置文件,打开压缩模块
  

vim /usr/local/httpd/conf/httpd.conf  

  
LoadModule headers_module modules/mod_headers.so
  
LoadModule deflate_module modules/mod_deflate.so     //开启 去掉前面#
  
LoadModule filter_module modules/mod_filter.so
  

  
##在末尾添加下面的行
  

  AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript    ##支持压缩的格式
  DeflateCompressionLevel 6    ##压缩比
  SetOutputFilter DEFLATE
  

  

  至此已经配置好了,我们可以使用脚本验证下语法是否存在错误,验证脚本在 /usr/local/httpd/bin/ 目录中。
  

[root@CentOS7-2 ~]# cd /usr/local/httpd/bin/  
[root@CentOS7-2 bin]# ./apachectl -t -D DUMP_MODULES | grep "deflate"
  deflate_module (shared)
  

二、网页缓存模块
  主配置文件中打开模块,并在末尾添加语块。
  

vim /usr/local/httpd/conf/httpd.conf  

  
LoadModule expires_module modules/mod_expires.so ##开启
  

  ##在末尾添加下面的行
  
  ExpiresActive On
  ExpiresDefault "access plus 50 seconds"    ##访问最大缓存时间50s
  

  

  查看模块是否正常开启
  

[root@CentOS7-2 ~]# cd /usr/local/httpd/bin/  
[root@CentOS7-2 bin]# ./apachectl -t -D DUMP_MODULES | grep "expires"
  
expires_module (shared)
  

三、安全性优化
  此项主要是对网络日益严重的盗链现象,防止本站点网址图片被别人盗链使用。
  主配置文件修改
  

vim /usr/local/httpd/conf/httpd.conf  

  
LoadModule rewrite_module modules/mod_rewrite.so   ##开启
  

  
  Options Indexes FollowSymLinks
  

AllowOverride None  

  
Require all granted
  

  
RewriteEngine On
  
RewriteCond %{HTTP_REFERER} !^http://localhost/.*$ [NC]
  
RewriteCond %{HTTP_REFERER} !^http://localhost$ [NC]
  
RewriteCond %{HTTP_REFERER} !^http://localhost/.*$ [NC]
  
RewriteCond %{HTTP_REFERER} !^http://localhost/$ [NC]
  
RewriteRule .*\.(gif|jpg|swf)$ http://localhost/盗链图片  ##放在网站站点目录下,盗链原图片会重定向到这张图片上
  

  

  查看模块是否正常开启
  

[root@CentOS7-2 ~]# cd /usr/local/httpd/bin/  
[root@CentOS7-2 bin]# ./apachectl -t -D DUMP_MODULES | grep "rewrite"
  rewrite_module (shared)
  

四、隐藏版本信息
  打开主配置文件,开启default配置文件
  

vim /usr/local/httpd/conf/httpd.conf  

  
Include conf/extra/httpd-default.conf  ##开启
  

vim /usr/local/httpd/conf/extra/httpd-default.conf  

  
ServerTokens Prod            //只显示名称,没有版本
  
ServerSignature Off
  

Apache 工作模式

三种工作模式详解
  我们可以通过脚本查看当前工作模式
  

cd /usr/local/httpd/bin/  
./httpd -l
  


  •   Prefork MPM : 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器。
      

    他的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。  


  •   Worker MPM : 此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。
      

        由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。  

      不管是Worker模式或是Prefork 模式,Apache总是试图保持一些备用的(spare)或者是空闲的子进程(空闲的服务线程池)用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。

  •   Event MPM:以上两种稳定的MPM方式在非常繁忙的服务器应用下都有些不足。
      

        尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。一个以Worker MPM方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻服务站点的高峰时),而Event MPM可以用来处理更高负载。值得注意的是,Event MPM不能在安全HTTP(HTTPS)访问下工作。   

      对于Event 模式,apache给出了以下警告:
      This MPM is experimental, so it may or may not work as expected .
      这种MPM目前处于试验状态,他可能不能按照预期的那样工作。

如何在三种模式中切换
  在编译安装的配置中,指定--with-mpm=NAME 选项指定MPM,NAME就是你想使用的MPM的名称。不指定模式的话,默认为Prefork MPM。

配置模式参数
  开启mpm配置文件模块
  

vim /etc/httpd.conf  
Include conf/extra/httpd-mpm.conf
  

  编辑配置模式参数
  

vim /usr/local/httpd/conf/extra/httpd-mpm.conf  

  

  StartServers             10       # 启动时进程数
  MinSpareServers          10       # 最小空闲进程数
  MaxSpareServers         50        # 最大空闲进程数
  MaxRequestWorkers      150        #最大并发进程数
  MaxConnectionsPerChild   0        # 最大连接数限制
  

  

  三种配置模式的配置都是一样的,我们只需要对部分参数根据模式进行修改就可以了。



运维网声明 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-636129-1-1.html 上篇帖子: Apache Kylin在美团数十亿数据OLAP场景下的实践 下篇帖子: 【翻译】关于Apache Flume FileChannel
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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