本文针对apache web服务器的安装配置收集有效的一些经验和方法,用于交流。
1.<!--[endif]-->Apache安装配置Apache的安装,考虑只用于Tomcat的前段代理,处理图片和静态文件的请求,并把动态请求转发到tomcat服务处理。本文使用编译安装方式,把跟需求无关的模块关闭,只使用最小的模块编译,提高软件性能。 配置编译命令请参考: http://www./download/doc/apache/ApacheManual/install.html#configure 编译参数说明: 编译和包含是两个不同的概念。编译是指这个模块被编译了,要想使用它,只用简单的修改httpd.conf加上LoadModule xxx_module libexec/mod_xxx.so 明确指出。 用以前命令可以查看缺省时已编译和包含进去的模块。不用显式的--enable-MODULE[=shared] 和LoadModule 操作。就已经可以使用的。
$ cd /tools
$ tar –xzvf apache-2.0.59.tar.gz $ cd httpd2.0.59 $ CC="pgcc" CFLAGS="-O2" \ ./configure --prefix=/usr/apache-2.0.59 \ --disable-access \ --disable-auth \ --disable-include \ --disable-env \ --disable-status \ --disable-autoindex \ --disable-asis \ --disable-cgi \ --disable-negotiation \ --disable-imap \ --disable-actions \ --disable-userdir \ --disable-alias \ --enable-deflate \ --enable-headers \ --enable-setenvif \ --enable-so $ make $ make install 安装完成后,因为编译关闭了很多默认的功能模块,所以直接使用发布的默认配置是不能启动服务器的,需要作调整。 设apache的安装目录为$APACHE_HOME 备份默认配置文件$APACHE_HOME/conf/httpd.conf,然后使用highperformance.conf最为配置文件 $ cd $APACHE_HOME/conf/
$ mv httpd.conf httpd.conf_bak $ cp highperformance.conf httpd.conf $ ../bin/apachectr start
如果启动失败,请屏蔽调httpd.conf中的mod_access相关命令,如Order等,关于目录权限的控制在本例中可以使用变通方式解决,使用没有加载目录权限控制功能。 启动验证,访问http://$IP/,如果正常显示页面,表示成功。 <!--[if !supportLists]-->2.<!--[endif]-->PMPMPM(Multi-Processing Modules,多道处理模块) 指定MPM的方法 $ ./configure --help|grep mpm 显示如下: --with-mpm=MPM Choose the process model for Apache to use. MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool} 主要阐述prefork,如果不用“--with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM,prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。 prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。 下面是prefork的默认配置段: <IfModule prefork.c> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> MinSpareServers 设置了最小的空闲进程数。 MaxSpareServers 设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。 MaxClients MaxClients是这些指令中最为重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。系统管理员可以根据硬件配置和负载情况来动态调整这个值。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256(在2.0中源于#define DEFAULT_SERVER_LIMIT 256)。如果把这个值设为大于256,那么Apache将无法起动。事实上,256对于负载稍重的站点也是不够的。在Apache 1.3中,这是个硬限制。如果要加大这个值,必须在“configure”前手工修改的源代码树下的src/include/httpd.h中查找256,就会发现“#define HARD_SERVER_LIMIT MaxRequestsPerChild 设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:可防止意外的内存泄漏;在服务器负载下降的时侯会自动减少子进程数。 Apache+jk2的每个进程的的大小是 apache_max_process_with_good_perfermance < ( 即最佳性能设置为:400 按照上面的分析,本系统的的prefork.c配置为: <IfModule prefork.c>
ServerLimit 400 MaxClients 400 StartServers 5 MinSpareServers 5 MaxSpareServers 10 </IfModule> <!--[if !supportLists]-->3.<!--[endif]-->gzip压缩输出通过加入mode_deflate模块对服务器输出压缩传输,可以减小输出压力,节约带宽。 可以减少40%左右的流量,减少机器用于传输的负载. 压缩输出的配置需要以下三个模块功能支持 mod_setenvif.c mod_deflate mod_headers 具体说明请参考:http://www./download/doc/apache/ApacheManual/mod/ 配置 参考:http://www./download/doc/apache/ApacheManual/mod/mod_deflate.html AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css
# Compress everything except images <Location /> # Insert filter SetOutputFilter DEFLATE # Netscape 4.x has some problems ![]() BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Don‘t compress images SetEnvIfNoCase Request_URI \ \.(?:gif|jpe?g|png)$ no-gzip dont-vary # Make sure proxies don‘t deliver the wrong content Header append Vary User-Agent env=!dont-vary </Location> |
|