Nginx反向代理上游不工作

qcbq4gxm  于 2023-05-22  发布在  Nginx
关注(0)|答案(2)|浏览(163)

我在Nginx上搞不清楚负载平衡。我正在使用:- Ubuntu 16.04和- Nginx 1.10.0。
简而言之,当我将我的ip地址直接传入“proxy_pass”时,代理工作:

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

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

upstream backend {
     server 01.02.03.04;
}

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

当我访问我的代理计算机时,我会看到默认的Nginx服务器页面,而不是来自上游IP地址的内容。
如有任何进一步的协助,将不胜感激。我已经做了大量的研究,但不能找出为什么“上游”不工作。我没有任何错误。它只是不代理。

sg3maiej

sg3maiej1#

好吧,看来我找到答案了…
关于后端服务器的两件事,至少对于使用IP地址的上述场景:
1.必须指定端口
1.端口不能是: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提醒我重新考虑端口。

3ks5zfa0

3ks5zfa02#

下面的示例可以工作:
唯一需要说明的是,如果服务器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;
        }
}

相关问题