我正在运行 Ubuntu 10.04 nginx 服务器,并使用 apache 的反向代理(以运行 munin 监控)。
这是我的默认 Apache 站点文件的摘录:
<VirtualHost *:8090>
ServerAdmin webmaster@localhost
DocumentRoot /var/cache/munin/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
以下是我的示例.comnginx配置文件:
location /stats {
proxy_pass http://127.0.0.1:8090/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffers 32 4k;
}
每当我去example.com/stats,nginx 通过端口 8090 指向 apache,apache 提供 munin web 目录。运行良好。
但是如果我想添加另一个域名,比如示例网站?我会有一个 nginx 配置文件,但我该如何让 apache 有DocumentRoot
其他东西呢?由于请求是从 nginx 通过本地主机端口 8090 进入 apache 的,apache 如何确定请求来自哪个站点,以及使用哪个DocumentRoot
/configuration 来处理它?
我假设我必须以某种方式在 apache 中使用 nginx 设置的标头($host;
或$proxy_add_x_forwarded_for;
变量?)...
答案1
我在一个 nginx.conf 文件上运行多个域。试试这个:
server {
listen xxx.xxx.xxx.xxx:8090;
server_name example.org;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://127.0.0.1:8090;
}
}
server {
listen xxx.xxx.xxx.xxx:8090;
server_name example.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://127.0.0.1:8090;
}
}
然后在你的 apache 中添加两个虚拟配置
<VirtualHost *:8090>
ServerName example.org
ServerAdmin webmaster@localhost
DocumentRoot /var/cache/munin/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost>
<VirtualHost *:8090>
ServerName example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/cache/munin/www2
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost>