我正在嘗試創建一個到 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;但同樣的錯誤。
uj5u.com熱心網友回復:
NGINX 將始終將 DNS 名稱決議為 IP 地址。
問題可能出在后端服務器 SNI 上。鑒于此服務器上托管了多個站點,并且該服務器支持 SNI,您應該在 NGINX 配置中server name使用來發送它proxy_ssl_server_name on;。
我剛剛在我的 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上游服務器。正如您已經正確注意到的那樣,這不會起作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/396818.html
標籤:nginx nginx-反向代理
