Nginx捕获所有主机作为前端到Apache对于ISPConfig 3在Debian Lenny上
作者Nedim Hadzimahmutovic <h.nedim@gmail.com>
版本:v1.1
最后变动:2010年5月19日
介绍
Apache一直是我的首选Web服务器。 特别是在资源有限的环境(如VPS)中,这是一个真正的野兽。 我开始玩Nginx一个轻量级的高性能网络服务器。 我感兴趣的领域是运行Nginx作为反向代理,使其在Apache / ISPConfig 3环境中工作。
问题
我是OpenVZ,apache2-mpm-itk,mod_php用户。 Apache mpm-itk不支持FastCGI。 如果您使用64位操作系统,则此问题会大大增加,因为Apache现在将使用更多内存(32位系统具有4字节指针,而64位系统具有8字节指针)。 我开始收到KMEMSIZE限制错误,而Apache是为什么。 Apache使我的VPS不可用,所以我不得不寻找一种替代方案。
解决方案
Nginx是答案,但我是一个仅支持Apache的ISPConfig用户,如果我找到了一个方法,那我就没有办法手动管理每个虚拟主机。 解决方案是将Nginx设置为将所有主机作为前端,并将代理到Apache,后者将在另一个端口上运行。 这样,Nginx将提供静态文件,PHP将留给Apache。 您也可以将整个域名留给Nginx,如果您愿意,只需将该域名的虚拟主机放在默认的虚拟主机之前。 在64位操作系统之上运行一个32位chroot环境并安装32位Apache,但本教程将不再赘述。
配置Apache
配置Apache在/etc/apache2/ports.conf
和所有虚拟主机中的端口82上运行。 为了更容易使用sed
命令:
# sed -ie 's/YOUR-IP:80/YOUR-IP:82/g' /etc/apache2/sites-available/*.vhost
我假设您的虚拟主机是基于IP的 - 您的虚拟主机可能具有*:80而不是IP:80。
sed命令将使您的.vhost文件的备份文件具有.vhoste扩展名。 您可以移动备份vhost文件:
mkdir /root/apache2_vhost_backup/
mv /etc/apache2/sites-available/*.vhoste /root/apache2_vhost_backup/
重新启动apache并使用netstat
检查是否在端口82
上运行:
# /etc/init.d/apache2 restart
# netstat -tunap | grep apache2
tcp 0 0 0.0.0.0:82 0.0.0.0:* LISTEN 7630/apache2
现在您必须更改ISPConfig Apache模板。 将它们复制到您的conf-custom
目录中:
# cd /usr/local/ispconfig/server/
# cp conf/apache_ispconfig.conf.master conf-custom/
# cp conf/vhost.conf.master conf-custom/
打开两个文件并更改:80
到:82
。 只要确保运行grep
命令并检查输出是否匹配:
# grep :82 -i /usr/local/ispconfig/server/conf-custom/*
/usr/local/ispconfig/server/conf-custom/apache_ispconfig.conf.master:NameVirtualHost {tmpl_var name="ip_address"}:82
/usr/local/ispconfig/server/conf-custom/vhost.conf.master: :82>
您将看到所有请求都源自localhost( 127.0.0.1
)。 要查看用户真正的IP地址,您必须安装libapache2-mod-rpaf
:
# apt-get install libapache2-mod-rpaf
将以下内容添加到/etc/apache2/apache2.conf中
:
# nano /etc/apache2/apache2.conf
RPAFsethostname On RPAFproxy_ips 127.0.0.1 YOU_IP_ADDRESS
安装和配置Nginx
启用lenny-backports存储
库,您将在http://backports.org/上找到说明 。
apt-get install nginx
删除默认的vhost:
# rm /etc/nginx/sites-available/default
打开文件:
# nano /etc/nginx/sites-available/default
将以下内容添加到文件中:
server { listen 80 default; server_name _; server_name_in_redirect off; resolver 127.0.0.1; #### www. redirect - all domains starting with www will be redirected to http://domain. #### if ($host ~* ^(www\.)(.+)) { set $rawdomain $2; rewrite ^/(.*)$ http://$rawdomain/$1 permanent; } access_log /var/log/ispconfig/httpd/$host/access.log; location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|flv|html|htm|mp3)$ { root /var/www/$host/web; access_log off; expires 30d; } location / { root /var/www/$host/web; index index.html index.htm index.php; access_log off; proxy_pass http://$host:82; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
而已。 Nginx将为所有静态文件(如图像)提供服务,甚至将HTML文件和php内容转发到Apache。