HTTP nginx 到 HTTPS proxy_pass returns 504 错误网关
HTTP nginx to HTTPS proxy_pass returns 504 BAD Gateway
我正在尝试创建一个 proxy_pass 到 https 地址(我的 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 总是会将 DNS 名称解析为 IP 地址。
问题可能出在 backend-servers 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
header。在您的配置中,您将 localhost
作为 Host
发送到上游服务器。正如您正确注意到的那样,这将不起作用。
我正在尝试创建一个 proxy_pass 到 https 地址(我的 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 总是会将 DNS 名称解析为 IP 地址。
问题可能出在 backend-servers 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
header。在您的配置中,您将 localhost
作为 Host
发送到上游服务器。正如您正确注意到的那样,这将不起作用。