多站点 Nginx 反向代理路由到 Apache

多站点 Nginx 反向代理路由到 Apache

我正在运行 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>

相关内容