(转载)高负载WEB动态页面与静态页面的分离
试了一段时间的Lighttpd,表现的确不错,原先用APACHE只能跑到6K/S,改用Lighttpd后性能提升了将近一倍,只是跑PHP似乎很不稳定,数据库处理时间长一点就会到导致Lighttpd出现500的错误,也就是说要想使Lighttpd发挥更好的性能,除了优化程序还是优化程序,尽可能的加快PHP的执行速度,另外加上eAccelerator性能会有更大的提高。
说了这么多优点,再来说说公司最近所尝试的一些经验,PHP程序已被优化的不能再优化了,但是有时候操作一下数据库(比如执行mysqldump)就会出现500错误,并发量非常大的时候很容易出现,在这点上Lighttpd的表现就没有Apache稳定了,所以想了一个折中的办法,让Apache来处理PHP程序,其他的静态页面(包括图片、软件等等)全都交给Lighttpd来处理。而实现方法就是通过mod_proxy来实现,Apache做前端处理或Lighttpd做前端处理都行,反正这2种都有个mod_proxy模块,基本上一样。
下面就以CentOS 4.4系统下使用Apache(80端口)和Lighttpd(81端口)实现动态页面和静态页面的分离。
Apache采用系统默认安装(yum install apache)的即可,网上的安装文档也很多,偶就不再介绍了。
安装Lighttpd v1.4.13
# yum install pcre-devel # cd /usr/local/src # wget http://www.lighttpd.net/download/lighttpd-1.4.13.tar.gz # tar -zxvf lighttpd-1.4.13.tar.gz # cd lighttpd-1.4.13 # ./configure --with-pcre # make # make install # cd doc # cp sysconfig.lighttpd /etc/sysconfig/lighttpd # cp rc.lighttpd.redhat /etc/init.d/lighttpd # chkconfig lighttpd on # mkdir -p /etc/lighttpd # cp lighttpd.conf /etc/lighttpd/ # mkdir /var/log/lighttpd # touch /var/log/lighttpd/access.log # touch /var/log/lighttpd/error.log # chown -R apache:apache /var/log/lighttpd
# vi /etc/init.d/lighttpd
将lighttpd=”/usr/sbin/lighttpd”改为lighttpd=”/usr/local/sbin/lighttpd”
编辑Lighttpd的配置文件lighttpd.conf,大致修改如下:
server.modules = ("mod_access", "mod_simple_vhost", "mod_accesslog" ) server.document-root = "/var/www/html" server.errorlog = "/var/log/lighttpd/error.log" accesslog.filename = "/var/log/lighttpd/access.log" server.port = 81 server.bind = “localhost” simple-vhost.server-root = “/var/www/html/” simple-vhost.default-host = “” simple-vhost.document-root = “/” server.username = “apache” server.groupname = “apache”
至此Lighttpd基本上已经配置完成了,执行/etc/init.d/lighttpd start就开始监听81端口了。接下来就配置Apache,所要做的就是开启mod_rewrite和mod_proxy模块,大致修改如下:
LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_connect_module modules/mod_proxy_connect.so <VirtualHost *:80> ServerAdmin <a href="mailto:webmaster@sofee.cn">webmaster@sofee.cn</a> DocumentRoot /var/www/html/test.sofee.cn ServerName test.sofee.cn <IfModule mod_rewrite.c> RewriteEngine On # RewriteLog logs/rewrite_log # RewriteLogLevel 1 RewriteRule "^/((.*).(js|css|htm|html|swf|gif|jpg|png|ico|exe|zip|rar))$" "http://0.0.0.0:81/$1" [P,QSA,L] RewriteRule "^/(.*)" "$0" [L] </IfModule> <IfModule mod_proxy.c> ProxyRequests Off ProxyPreserveHost On ProxyReceiveBufferSize 16384 ProxyTimeout 300 ProxyPassReverse / http://0.0.0.0:81/ </IfModule> </VirtualHost>
至此,Apache也已配置完成,执行/etc/init.d/httpd start开始监听80端口。
为了使mod_proxy能够发挥更好的性能,还可以加 入mod_cache模块:
LoadModule cache_module modules/mod_cache.so LoadModule disk_cache_module modules/mod_disk_cache.so LoadModule mem_cache_module modules/mod_mem_cache.so <IfModule mod_cache.c> <IfModule mod_mem_cache.c> CacheEnable mem / MCacheSize 10240 MCacheMaxObjectCount 100 MCacheMinObjectSize 1 MCacheMaxObjectSize 2048 </IfModule> <IfModule mod_disk_cache.c> CacheRoot /var/cache/mod_proxy CacheEnable disk / CacheDirLevels 5 CacheDirLength 3 </IfModule> </IfModule>
参考文档:
- mod_proxy
: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html
- mod_cache
: http://httpd.apache.org/docs/2.0/mod/mod_cache.html
- mod_rewrite
: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
- Lighttpd