nginx 反向代理-proxy_pass 导致 503 服务不可用

nginx 反向代理-proxy_pass 导致 503 服务不可用

我有以下配置:

server {

    listen: 8080;
 
    location / {
        proxy_pass           https://somehost.abc.xyz;
        proxy_redirect       off;
        proxy_set_header     Host somehost.abc.xyz;
        proxy_set_header     X-Real-IP somehost.abc.xyz;
        proxy_set_header     X-Forwarded-For somehost.abc.xyz;
        proxy_set_header     X-Forwarded-Host somehost.abc.xyz;
        proxy_set_header     HELLO pizza;
    }

}

每当我访问代理时,比如说我访问 http://localhost:8080/home,我都会收到 503 服务不可用(不是来自 nginx 服务,而是来自我尝试访问的应用程序https://somehost.abc.xyz/home)。

但如果我只是去https://somehost.abc.xyz/home或者进行重定向,return 301 https://somehost.abc.xyz/home;一切都很好,我进入了应用程序。虽然这对我没有帮助,因为我想通过代理到达那里,这样我就可以为每个通过的请求添加一个请求标头。

有什么想法可能导致这种情况以及如何解决?

答案1

尝试在 proxy_pass 地址上使用后端端口,并且其标头“HELLO”对后端应用程序有效吗?

server {
            listen: 8080;
     
            location / {
                proxy_pass          https://somehost.abc.xyz:443;
                proxy_redirect      off;
                proxy_set_header    Host                somehost.abc.xyz;
                proxy_set_header    X-Real-IP           $remote_addr;
                proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header    X-Forwarded-Host    your.host.address;
                proxy_set_header    HELLO               pizza;
    
                
                proxy_ssl_server_name   on;
                proxy_ssl_name      somehost.abc.xyz;
                # Optional
                proxy_ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
                proxy_ssl_ciphers   'Required SSL Ciphers';
                proxy_ssl_trusted_certificate   "/path/to/your/ca-cetificates.crt";
            }
        }

编辑:使用 SSL 后端你应该定义代理 SSL 名称如果你没有后端 SSL 证书

答案2

我遇到过类似的问题,我发现以下语句导致了 503 错误:

 proxy_set_header     Host $host;  # same for $http_host;

由于它对于我们的用例来说不是必需的,所以我可以直接将其删除,这样就可以摆脱 503 并让 nginx 最终向上游服务器发出请求。

我后来还了解到,似乎是$host变量的使用而不是语句本身导致了这个问题,这意味着我的回答可能不是重点。

设置固定值(在本例中是在server块内)不会产生问题。

不过,我没有解释,我希望其他人可以对此有所解释。这在 nginx 1.14 中曾经有效,我相信在 1.16 中也有效,但在 1.18 及更高版本中不再有效。

相关内容