今天準備的線上演示版本,把端口映射到外網(wǎng)后,發(fā)現(xiàn)跳轉(zhuǎn)不正確沛厨,丟失了端口。
環(huán)境:centos7+docker
方案嘗試:
1摔认、修改docker的端口映射逆皮,直接把nginx的端口改為外網(wǎng)的端口。改完之后参袱,大部分連接好用电谣,還有個別鏈接不好用秽梅。方案被pass。
2剿牺、我們的nginx的原來配置有這么一行:proxy_set_header?Host? ? ? ? ? ? ?$host;
我查看了nginx的文檔企垦,有這么一段說明 :
如果不想改變請求頭“Host”的值,可以這樣來設(shè)置:
proxy_set_header Host$http_host;
但是晒来,如果客戶端請求頭中沒有攜帶這個頭部钞诡,那么傳遞到后端服務(wù)器的請求也不含這個頭部。 這種情況下湃崩,更好的方式是使用$host變量——它的值在請求包含“Host”請求頭時為“Host”字段的值荧降,在請求未攜帶“Host”請求頭時為虛擬主機的主域名:
proxy_set_header Host$host;
此外,服務(wù)器名可以和后端服務(wù)器的端口一起傳送:
proxy_set_header Host$host:$proxy_port;
如果某個請求頭的值為空攒读,那么這個請求頭將不會傳送給后端服務(wù)器:
proxy_set_header Accept-Encoding"";
于是把這行配置改為:?proxy_set_header?Host? ? ? ?$http_host;
改完之后誊抛,沒有發(fā)現(xiàn)丟失端口的情況。
使用方案2之后整陌,暫時沒有發(fā)現(xiàn)什么不良反應(yīng)拗窃。