directadmin 主机上使用 nginx 做前端提高系统性能

PHPABC DirectAdmin, Nginx 2,433 次浏览 , 没有评论

directadmin是使用相当广泛的一套linux主机管理系统,使用apache+php+mysql这样的主流结构,效果好,稳定性佳,操作方便,功能强大。
但是apache作为一个虽然稳定的web结构,并发数的支撑却不是很理想。在目前的环境下,比较流行的nginx+php- fpm的fastcgi结构,单纯跑部分php应用性能十分好,却又不能像directadmin那样方便的管理。
其实我们完全可以用nginx 作为apache前面的前端,利用nginx从0.7之后支持的缓存功能,nginx可以处理大部分对于静态文件的请求,并且并发性能好,很大程度上减少 apache的并发负载。动态的php文件再转发给apache处理,在不影响directadmin的使用上,可以有效的提高系统的性能。
当然这样做也是有一些缺陷的。比如说,静态文件从apache传递给nginx缓存起来,在一个缓存周期内nginx不需要再向apache发起请求,directadmin对流量的统计就会与服务器上真实传出去的流量有区别。在一个周期内apache只要传输一次,nginx却仍然需要对用户传递多次的文件。同时缓存周期如果设置过短,起不到多好的减少负载效果,如果设置过长,又会明显的影响到用户的访问体验。用户会发现在后台上传的静态文件,在前台怎样刷新都不会变,一定要等到一个缓存周期过去。除非使用style.css?ver=0.2这样的形式,才可以查看效果。这样毕竟影响了用户的使用体验,利弊值得斟酌。但总的来说瑕不掩瑜,这个方法还是很大程度上可以提高系统的负载能力的。
和直接用nginx做代理转发apache的内容略有不同,在directadmin系统上,我们还要额外加一些东西。
首先,下载nginx。我现在用的还是0.7系列的正式版本。
下载后,编译。

tar zxvf nginx-0.7.66.tar.gz
cd nginx-0.7.66
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
make
make install

然后先不要启动nginx,对conf文件做一些修改,主要是对缓存部分的设置。

vi /usr/local/nginx/conf/nginx.conf

里面对缓存的设置部分如下。写在http段里

    proxy_temp_path  /usr/local/nginx/proxy_temp;
    proxy_cache_path /usr/local/nginx/proxycache levels=1:2 keys_zone=CachePool:300m inactive=1d max_size=3g;
 
    server {
        listen       真实的公网IP:80;
        server_name  localhost;
 
        location / {
                proxy_pass        http://127.0.0.2;
                proxy_set_header  X-Real-IP  $remote_addr;
                proxy_set_header  FORWARDED-FOR  $remote_addr;
                proxy_set_header Host $host;
 
                location ~* \.(js|css|gif|png|bmp|jpeg|jpg|swf)$ {
                        proxy_pass        http://127.0.0.2;
                        proxy_set_header  X-Real-IP  $remote_addr;
                        proxy_set_header Host $host;
 
                        proxy_cache CachePool;
                        #proxy_cache_key $host$request_uri$http_if_modified_since;
                        proxy_cache_key $host$request_uri;
                        proxy_cache_valid 5m;
                }
        }

一些解释
max_size=3g 缓存占用的最大空间3G
proxy_pass http://127.0.0.2 回头我们要把apache的监听改成监听这个IP的80端口。当然,也可以用其他端口和其他IP,这个自由设置。
proxy_cache_valid 5m; 缓存生存时间5分钟。这个时间的设置也要根据主机上的站点来具体设置,没有任何可以作为标准的说法。

设置完后,先停止 httpd。

/etc/init.d/httpd stop
/etc/init.d/directadmin stop

directadmin 也一定是要停的,不然会自动启动httpd进程。
修改文件
/etc/httpd/conf/extra/httpd-vhosts.conf
对应添加修改成

LogFormat "%O \"%r\"" homedir
NameVirtualHost 127.0.0.2:80
NameVirtualHost 真实公网IP:443
<VirtualHost 127.0.0.2:80>
    ServerAdmin webmaster@localhost
    AliasMatch ^/~([^/]+)(/.*)* /home/$1/public_html$2
    DocumentRoot /var/www/html
    ServerName localhost
    ScriptAlias /cgi-bin/ /var/www/cgi-bin/
    CustomLog /var/log/httpd/homedir.log homedir
</VirtualHost>

然后安装一个apache需要的小模块。

wget http://www.openinfo.co.uk/apache/extract_forwarded-2.0.2.tar.gz
tar zxvf extract_forwarded-2.0.2.tar.gz
cd extract_forwarded
apxs -c -i -a mod_extract_forwarded.c

结束后修改/etc/httpd/conf/httpd.conf

ServerRoot "/etc/httpd"
Listen 127.0.0.2:80
 
#LoadModule dummy_module /usr/lib/apache/mod_dummy.so
#LoadModule php5_module        /usr/lib/apache/libphp5.so
LoadModule extract_forwarded_module /usr/lib/apache/mod_extract_forwarded.so
MEForder refuse,accept
MEFrefuse all
MEFaccept 127.0.0.2
Include /etc/httpd/conf/extra/httpd-phpmodules.conf
FileETag none
 
User apache
Group apache
 
ServerAdmin admin@localhost
DocumentRoot "/var/www/html"

接下来是修改directadmin里已经建立的用户的对应配置

cd /usr/local/directadmin/data/users
find -name '*.conf' | xargs perl -pi -e 's|真实公网IP|127.0.0.2|g'

然后修改directadmin的模板,让以后新添加的用户也自动启用对应的设置。
进入/usr/local/directadmin/data/templates/custom 自定义模板的地方
里面需要从上层目录拷贝6个文件进来。
ips_virtual_host.conf
virtual_host2.conf
virtual_host.conf
redirect_virtual_host.conf
virtual_host2_sub.conf
virtual_host_sub.conf
然后对应修改这六个文件中的部分,主要就是类似>的地方修改成,让directadmin生成用户配置文件的时候不写入真实IP,直接用127.0.0.2来代替。
然后就可以了,检查确认无误。

/etc/init.d/httpd start
/usr/local/nginx/sbin/nginx  (启动nginx)

好吧,检查进程,里面已经有nginx和httpd同时在跑了。初次的缓存生成后,用户再次读取静态文件的时候,就不需要麻烦 apache去了。
nginx的高级设置,这个就另外自行查看资料了。在我实际跑的5台机器上,经过这样的设置后,都还是很有效的提升了系统负载能力的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Go