Nginx 反向代理上游不起作用

Ave*_*ith 7 reverse-proxy nginx

我在确定 Nginx 上的负载平衡时遇到了麻烦。我正在使用: - Ubuntu 16.04 和 - Nginx 1.10.0。

简而言之,当我将我的 ip 地址直接传递给“proxy_pass”时,代理工作:

server {
    location / {
            proxy_pass http://01.02.03.04;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我访问我的代理计算机时,我可以看到来自代理 ip 的内容......但是当我使用上游指令时,它不会:

upstream backend {
     server 01.02.03.04;
}

server {
    location / {
            proxy_pass http://backend;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我访问我的代理计算机时,我看到的是默认的 Nginx 服务器页面,而不是来自上游 IP 地址的内容。

任何进一步的帮助将不胜感激。我做了大量的研究,但无法弄清楚为什么“上游”不起作用。我没有收到任何错误。它只是不代理。

Ave*_*ith 4

好吧,看来我找到了答案......

关于后端服务器的两件事,至少对于使用 IP 地址时的上述场景而言:

  1. 必须指定端口
  2. 端口不能是:80(根据@karliwsn,端口可以是80,只是上游服务器无法侦听与反向代理相同的端口。我还没有测试过,但值得注意)。

后端服务器块应配置如下:

server {

    # for your reverse_proxy, *do not* listen to port 80
    listen 8080;
    listen [::]:8080;

    server_name 01.02.03.04;

    # your other statements below
    ...
}
Run Code Online (Sandbox Code Playgroud)

并且您的反向代理服务器块应配置如下:

upstream backend {
    server 01.02.03.04:8080;
}

server {
    location / {
        proxy_pass http://backend;
     }
}
Run Code Online (Sandbox Code Playgroud)

看起来好像后端服务器正在侦听 :80,反向代理服务器不会呈现其内容。我想这是有道理的,因为服务器实际上为公众使用默认端口 80。

感谢@karliwson 促使我重新考虑该端口。

  • 实际上上游的端口可以是 80,但它必须侦听与 nginx 使用的主 IP 地址不同的 IP。我通常让我的后端在本地主机上侦听,除非它位于远程服务器上。 (4认同)