我們有個項目,前端調用了第三方接口。為了避免跨域,所以使用nginx進行轉發。一直正常工作,相安無事。近日第三方調整了安全策略,http轉換成https,原本使用ip,現在也改成使用域名,所以nginx這里我們也需要改一下。結果改了以后,報404。
nginx的相關配置如下:
location /other3/ {proxy_pass https://gh.abc.com/3-18035/;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_read_timeout 180;
}
我再三拷問AI,它說了幾次廢話后,說有可能是Host頭部的原因:
默認情況下,Nginx 會將客戶端請求的 Host 頭部(即客戶端本身的地址,例如 10.26.40.24:9988)轉發給后端服務器。
如果后端服務器對 Host 頭部有嚴格要求(例如必須是 gh.abc.com),則需要顯式設置 Host 為后端服務器的域名。
于是再次修改,問題解決:
location /other3/ {proxy_pass https://gh.abc.com/3-18035/;proxy_set_header X-Forwarded-Proto $scheme;#proxy_set_header Host $http_host;proxy_set_header Host gh.abc.com; # 修改這里proxy_set_header X-Real-IP $remote_addr;proxy_read_timeout 180;
}
主要是nginx的配置代碼,都是抄過來的,東抄西抄,不知道具體含義。請教AI,它給出的含義是:
# 匹配所有以 "/other3/" 開頭的請求
location /other3/ {# 將匹配到的請求轉發到 https://gh.abc.com/3-18035/proxy_pass https://gh.abc.com/3-18035/;# 設置 "X-Forwarded-Proto" 請求頭為客戶端請求的協議(HTTP 或 HTTPS)# 即將客戶端請求的協議類型(HTTP 或 HTTPS)傳遞給后端服務器# 比如我的客戶端是http,則以http向目標服務器請求,盡管目標服務器是是https;# 如果目標服務器只認https,那只能是這樣設置:proxy_set_header X-Forwarded-Proto https;proxy_set_header X-Forwarded-Proto $scheme;# 將 Host 頭設置為客戶端請求中原始的 Host 頭部值# proxy_set_header Host $http_host;# 顯式設置 "Host" 請求頭為 "gh.abc.com"proxy_set_header Host gh.abc.com; # 設置 "X-Real-IP" 請求頭為客戶端的真實 IP 地址proxy_set_header X-Real-IP $remote_addr;# 設置 Nginx 等待后端服務器響應的超時時間為 180 秒proxy_read_timeout 180;
}
學習了。