在搭建 Apache 业务没上线以前,咱们须要不断去测试性能以达到甚至远远超过预期,所以咱们须要对 Apache 进行深度优化,本次咱们将介绍 Apache 的优化及工做模式详解。javascript
在 Linux 中搭建的 Apache ,要进行优化必须是在编译安装环境下进行,所以咱们须要对本机自带的 httpd 进行卸载。并从新下载并编译安装。要注意,在./配置的时候,要添加如下模块。css
./configure \ --prefix=/usr/local/httpd \ ##安装目录 --enable-deflate \ ##压缩模块 --enable-expires \ ##缓存模块 --enable-so \ --enable-rewrite \ ##重定向模块 --enable-charset-lite \ --enable-cgi
打开主配置文件,打开压缩模块html
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 ##在末尾添加下面的行 <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript ##支持压缩的格式 DeflateCompressionLevel 6 ##压缩比 SetOutputFilter DEFLATE </IfModule>
至此已经配置好了,咱们可使用脚本验证下语法是否存在错误,验证脚本在 /usr/local/httpd/bin/ 目录中。java
[root@CentOS7-2 ~]# cd /usr/local/httpd/bin/ [root@CentOS7-2 bin]# ./apachectl -t -D DUMP_MODULES | grep "deflate" deflate_module (shared)
主配置文件中打开模块,并在末尾添加语块。web
vim /usr/local/httpd/conf/httpd.conf LoadModule expires_module modules/mod_expires.so ##开启 ##在末尾添加下面的行 <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 50 seconds" ##访问最大缓存时间50s </IfModule>
查看模块是否正常开启apache
[root@CentOS7-2 ~]# cd /usr/local/httpd/bin/ [root@CentOS7-2 bin]# ./apachectl -t -D DUMP_MODULES | grep "expires" expires_module (shared)
此项主要是对网络日益严重的盗链现象,防止本站点网址图片被别人盗链使用。vim
主配置文件修改缓存
vim /usr/local/httpd/conf/httpd.conf LoadModule rewrite_module modules/mod_rewrite.so ##开启
<Directory "/usr/local/httpd/htdocs">
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/盗链图片 ##放在网站站点目录下,盗链原图片会重定向到这张图片上</Directory>服务器
查看模块是否正常开启
[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
咱们能够经过脚本查看当前工做模式
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 <IfModule mpm_prefork_module> StartServers 10 # 启动时进程数 MinSpareServers 10 # 最小空闲进程数 MaxSpareServers 50 # 最大空闲进程数 MaxRequestWorkers 150 #最大并发进程数 MaxConnectionsPerChild 0 # 最大链接数限制 </IfModule>
三种配置模式的配置都是同样的,咱们只须要对部分参数根据模式进行修改就能够了。