Nginx捕获所有主机作为前端到Apache对于ISPConfig 3在Debian Lenny

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。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏