【问题标题】:Nginx Reverse Proxy upstream not workingNginx反向代理上游不起作用
【发布时间】:2016-11-14 01:12:10
【问题描述】:

我无法确定 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 地址的内容。

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

【问题讨论】:

  • 您是否尝试在上游指定端口? server 01.02.03.04:80;
  • 我做到了,@karliwson。太奇怪了。

标签: nginx reverse-proxy


【解决方案1】:

好的,看来我找到了答案……

关于后端服务器的两件事,至少对于上述使用 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
    ...
}

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

upstream backend {
    server 01.02.03.04:8080;
}

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

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

感谢 @karliwson 推动我重新考虑移植。

【讨论】:

  • 其实upstream的端口可以是80,但是它必须监听一个与nginx使用的主IP地址不同的IP。我通常让我的后端在 localhost 上监听,除非它在远程服务器上。
  • 如果上游服务器需要,如何设置用户名/密码?
【解决方案2】:

以下示例有效:

唯一要提的是,如果服务器IP用作“server_name”,那么IP应该用于访问站点,意味着在浏览器中您需要将URL输入为http://yyy.yyy.yyy.yyy或(@ 987654322@),如果使用域名作为“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;
        }
}

【讨论】:

  • 如何设置上游服务器的用户名/密码?
猜你喜欢
  • 2017-06-29
  • 2019-06-15
  • 2019-11-28
  • 2021-07-10
  • 2020-06-23
  • 2019-06-05
  • 2019-07-28
  • 2021-09-15
  • 2019-05-03
相关资源
最近更新 更多