Nginx反向代理上游无法正常工作

时间:2016-11-14 01:12:11

标签: nginx reverse-proxy

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

简而言之,当我将我的IP地址直接传递到" proxy_pass"时,代理工作:

server {
    location / {
            proxy_pass http://01.02.03.04;
    }
}

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

upstream backend {
     server 01.02.03.04;
}

server {
    location / {
            proxy_pass http://backend;
    }
}

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

任何进一步的协助将不胜感激。我做了很多研究,但无法弄清楚为什么"上游"不管用。我没有收到任何错误。它只是没有代理。

2 个答案:

答案 0 :(得分:1)

好的,看起来我找到了答案......

关于后端服务器的两件事情,至少在使用IP地址时的上述情况:

  1. 必须指定端口
  2. 端口不能是:80(根据@karliwsn,端口可以是80,只是上游服务器无法收听与反向代理相同的端口。我还没有对它进行测试但是值得注意的是。)
  3. 后端服务器块应配置如下:

    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
        ...
    }
    

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

    upstream backend {
        server 01.02.03.04:8080;
    }
    
    server {
        location / {
            proxy_pass http://backend;
         }
    }
    

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

    感谢@karliwson推动我重新考虑这个港口。

答案 1 :(得分:0)

以下示例有效:

唯一需要说明的是,如果使用服务器 IP 作为“server_name”,那么应该使用 IP 访问站点,这意味着您需要在浏览器中输入 URL 作为 http://yyy.yyy.yyy.yyy 或(http://yyy.yyy.yyy.yyy:80),如果您使用域名作为“server_name”,则使用该域名访问代理服务器(例如http://www.yourdomain.com

upstream backend {
        server xxx.xxx.xxx.xxx:8080;
}

server {
        listen 80;
        server_name yyy.yyy.yyy.yyy;

        location / {
                proxy_pass http://backend;
        }
}