【问题标题】:Nginx Reverse Proxy with Multiple Backend Domains具有多个后端域的 Nginx 反向代理
【发布时间】:2016-01-08 11:19:36
【问题描述】:

我有 2 台服务器:-

服务器 1:NGINX 反向代理。

服务器 2:NGINX 有 5-6 个网站(不同的域)

所以基本上,所有用户都会来到服务器 1,服务器 1 会将流量代理传递到服务器 2 并获取响应。 Server 1 也会做缓存、WAF 等。

这是我对服务器 1 的配置:-

server {
  listen 80;
  server_name example.com www.example.com;

  location ~* {
     proxy_pass http://mysite:80;
}
}

server {
  listen 80;
  server_name server.com www.server.com;

  location ~* {
     proxy_pass http://mysite:80;
}
}

在我的服务器 2 中,在 NGINX 的 virtual.conf 中,我有以下配置:

index index.php index.html;
server {
    listen   80;
    server_name  example.com www.example.com;

    location / {
        root   /var/www/websites/example/;
        include location-php;
    }
}

    server {
        listen   80;
        server_name  server.com www.server.com;

        location / {
            root   /var/www/websites/server/;
            include location-php;
        }
    }

但是,每当我转到 http://example.comhttp://server.com(通过充当反向代理的服务器 1 引导)时,它都会显示服务器 2 的默认 NGINX 页面。我不确定我做错了什么。这种类型的设置也是一种正确的做事方式吗?

【问题讨论】:

    标签: nginx reverse-proxy


    【解决方案1】:

    这是您的主机问题。
    由于您的上游名称是mysite,所以上游请求中的主机名也是mysqsite
    所以主机与后端服务器不匹配。

    您可以通过在proxy_pass之前添加指令来解决这样的问题:
    proxy_set_header Host server.com

    【讨论】:

    • 非常感谢 ZYWG。它现在似乎正在工作。因此,为此,我必须为 server.com 和 example.com 添加指向后端服务器 IP 的 /etc/host 条目。那么这是正确的方法吗?我有 5-6 个域,对于每个域,我必须在 /etc/hosts 中添加 IP。
    • 您不需要向 /etc/hosts 添加任何内容。 nginx.conf 中的 server_name 只是一个字符串来匹配请求中的主机。你只是 proxy_set_header 主机 server.name; proxy_pass http://127.0.0.1;然后nginx会解析主机。
    • 啊。这似乎是更好的方法。非常感谢您的帮助:) 干杯