【问题标题】:HTTP nginx to HTTPS proxy_pass returns 504 BAD GatewayHTTP nginx 到 HTTPS proxy_pass 返回 504 BAD Gateway
【发布时间】:2022-03-02 16:34:30
【问题描述】:

我正在尝试为 https 地址创建一个 proxy_pass(我的 nginx 使用纯 HTTP 协议在 80 下运行)。

这是我在 conf 文件中的声明:

   location /viacep/ {
                  proxy_pass https://viacep.com.br/;
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header Host $host;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }

嗯,这个想法是当我输入localhost/viacep/ws/09340400/json 时,我得到了以下地址解析:https://viacep.com.br/ws/09340400/json。但我在 error.log 文件中出现以下错误:

2021/12/28 09:32:59 [error] 34664#0: *1 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: , request: "GET /viacep/ws/09540400/json HTTP/1.1", upstream: "https://165.227.126.241:443/ws/09540400/json", host: "localhost"

我想这个错误是由于地址解析 (https://165.227.126.241:443/ws/09540400/json) 而发生的,请使用 IP 而不是 DNS。

编辑 1

我尝试添加 proxy_ssl_server_name on; 但同样的错误。

【问题讨论】:

    标签: nginx nginx-reverse-proxy


    【解决方案1】:

    NGINX 将始终将 DNS 名称解析为 IP 地址。

    问题可能出在后端服务器 SNI。鉴于此服务器上托管了多个站点并且服务器支持 SNI,您应该在 NGINX 配置中使用 proxy_ssl_server_name on; 发送 server name

    我刚刚在我的 NGINX 版本 1.20 上配置了它

    server {
      listen 80;
    
      location / {
        proxy_pass https://viacep.com.br/;
        proxy_set_header Host viacep.com.br;
        proxy_set_header X-Forwarded-Proto https;
        proxy_ssl_server_name on;
    
      }
    }
    
    

    确保您发送正确的 Host 标头。在您的配置中,您将localhost 作为Host 发送到上游服务器。如您所见,这将无法正常工作。

    【讨论】:

    • 我试过但同样的错误。我添加了“proxy_ssl_server_name on”。
    • 我刚刚在我的服务器上创建了小型 PoC。查看更新的配置。
    • 谢谢,问题是主机头,我使用 $Host 如你所述,更改为 viacep.com.br 解决了问题。非常感谢
    猜你喜欢
    • 2021-02-24
    • 2022-07-07
    • 2018-04-23
    • 2017-01-04
    • 2020-05-09
    • 1970-01-01
    • 2019-05-29
    • 2019-01-22
    • 2021-09-11
    相关资源
    最近更新 更多