1.解压apache的压缩包:
[root]#tar zxvf httpd-2.0.54.tar.gz
[root]#cd httpd-2.0.54
2.编译安装:
编译前修改apache的编译文件,主要使其有更大的并发连接:
修改源文件下的worker.c文件
[root]#vi httpd-2.0.54/server/mpm/worker/worker.c
修改DEFAULT_SERVER_LIMIT、MAX_SERVER_LIMIT
以及DEFAULT_THREAD_LIMIT、MAX_THREAD_LIMIT的值,修改为
#define DEFAULT_SERVER_LIMIT 256
#define MAX_SERVER_LIMIT 50000
#define DEFAULT_THREAD_LIMIT 256
#define MAX_THREAD_LIMIT 50000
3.执行安装:
[root]#./configure --prefix=/home/apache --enable-modules=so --enable-rewrite --enable-deflate --with-mpm=worker
[root]#make && make install
注:采用worker模式,没有原来的256进程限制
[root]#mv /etc/httpd.conf /etc/httpd.bak
[root]#ln -s /usr/local/caixun/apache2054/conf/httpd.conf /etc/httpd.conf
//为了统一,注意链接名必须一致
4.编辑apache的配置文件:
[root]#vi /etc/httpd.conf
MEM线程设置(替换原来的内容)
<IfModule worker.c>
StartServers 10 <--启动时生成的子进程
MaxClients 5120 <--所有子进程中的线程总数,也就是同时并发数
MinSpareThreads 25 <--最少的空闲线程数
MaxSpareThreads 500 <--最多的空闲线程数
ThreadsPerChild 256 <--每个子进程包含256个线程,各个线程独立地处理请求
MaxRequestsPerChild 5000 <--每个子进程可处理的请求数,0为不限制
</IfModule>
用命令:ps -ef|grep http|wc -l可查看现在的进程数
5.如果apache在编译时没有修改work.c文件,还是可以通过以下方法来修改work的并发数
需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大
于等于MaxClients,而且 MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自
动调节到一个相应值(可能是个非期望值)。下面是笔者的 worker配置段:
<IfModule worker.c>
StartServers 3
MaxClients 2000
ServerLimit 25 <--在Apache 2.0中新加入了ServerLimit指令,使得无须重编译Apache就可以加大MaxClients
MinSpareThreads 50
MaxSpareThreads 200
ThreadLimit 200 <--
ThreadsPerChild 100
MaxRequestsPerChild 0
</IfModule>
=========================================
<IfModule prefork.c>
StartServers 10
MinSpareServers 10
MaxSpareServers 15
ServerLimit 2000 <--在Apache 2.0中新加入了ServerLimit指令,使得无须重编译Apache就可以加大MaxClients
MaxClients 1000
MaxRequestsPerChild 10000
</IfModule>
6.mod_deflate模块的使用
》1.编译mod_deflate模块
[root]#/web/apache2/bin/apxs -i -c -a /web/tool/httpd-2.2.9/modules/filters/mod_deflate.c
=========================================================================================
apxs命令参数说明:
-i 此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录中。
-a 此选项自动增加一个LoadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之。
-A 与 -a 选项类似,但是它增加的LoadModule命令有一个井号前缀(#),即此模块已经准备就绪但尚未启用。
-c 此选项表示需要执行编译操作。它首先会编译C源程序(.c)files为对应的目标代码文件(.o),然后连接这些目标代码和files中其余的目标代码文件(.o和.a),以生成动态共享对象dsofile 。如果没有指定 -o 选项,则此输出文件名由files中的第一个文件名推测得到,也就是默认为mod_name.so 。
==========================================================================================
》2.如果apache结合了php,那么要把php的自身压缩机制关闭:
[root]#vi /web/php5/lib/php.ini
=================================================
output_buffering = Off
output_handler =
zlib.output_compression = Off
=================================================
》3.设置httpd.conf文件:
[root]#vi /web/apache2/conf/httpd.conf
=============================================================================
LoadModule php5_module modules/libphp5.so
LoadModule deflate_module modules/mod_deflate.so
#---------mod_deflate module confiugration--------------------
SetOutputFilter DEFLATE
DeflateCompressionLevel 6 #<--DeflateCompressionLevel指令设置压缩程度,越高的压缩程度就会有越好的压缩效果,同时也意味着占用越多的CPU资源。
取值范围在 1(最低压缩率) 到 9(最高压缩率)之间。
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4/.0[678] no-gzip
BrowserMatch /bMSIE !no-gzip !gzip-only-text/html
#Explicit exclusion of files.
SetEnvIfNoCase Request_URI /.(?:gif|jpg|cab|jpe?g|exe|bmp|mp3|rar|zip|swf|png)$ no-gzip dont-vary
#Cache server support.
Header append Vary User-Agent env=!dont-vary
#logs.
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog logs/deflate_log deflate
#-------------------------------------------------------------
==============================================================================
》4.错误处理:
==[root]# /web/apache2/bin/apachectl -t
Syntax error on line 423 of /web/apache2/conf/httpd.conf:
Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
解决方案:安装mod_headers.c模块
/web/apache2/bin/apxs -i -c -a /web/tool/httpd-2.2.9/modules/metadata/mod_headers.c
==[root]# /usr/local/apache2/bin/apachectl -t
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
解决方案:在httpd.conf文件中加入ServerName [主机名]
==[root]# /usr/local/apache2/bin/apachectl -t
httpd: Syntax error on line 419 of /web/apache2/conf/httpd.conf: module deflate_module is built-in and can't be loaded
解决方案:出现这个情况,表明deflate_module模块是内建的,不用再调入,所以只需要把LoadModule *** 注释就可以了