問題
打開設計平台官網: http://baigong.xxx.cn/Products/designPlatform 刷新這個鏈接,就自動重定向到如下路徑: http://baigong.xxx.cn:9000/Products/designPlatform/ 而公網的域名服務器9000是沒有開放的,也是就說baigong.xxx.cn:9000是無法打開的。
預期目標
http://baigong.xxx.cn/Products/designPlatform 刷新這個鏈接,就自動重定向到如下路徑: http://baigong.xxx.cn/Products/designPlatform/
分析
nginx有個自帶的特性,這個特性之前一直沒注意到,那就是遇到目錄就自動重定向到新的路徑,這個新的路徑uri是一樣的,但多了斜杠。 例如上面的鏈接的 /Products/designPlatform 其實是個目錄。 正常情況下nginx就會重定向,也就是在原有路徑的情況再增加一個斜杠。 由於經過多層轉發,導致端口發生了變化。而在底層轉發時,$host是沒有發生變化的。但是端口轉發了,從80變成了9000 http://baigong.xxx.cn/Products/designPlatform 所以這個鏈接就自動變成了如下鏈接。 http://baigong.xxx.cn:9000/Products/designPlatform/
解決
這個時候要么rewrite鏈接,要么開啟不進行端口變化的配置,幸好nginx就有個配置項: port_in_redirect 這個配置項默認是on,也就是開啟的。 按照當前的預期目標,這里應該是要讓端口不變,也就是使用第一層訪問的端口80,所以這個配置項必須禁用。 事實上,禁用了這個配置項,問題解決。 完整的配置如下:
server { listen 9000; server_name baigong.xxx.cn; port_in_redirect off; #charset koi8-r; charset utf-8; #access_log logs/host.access.log main; location / { root html/website; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
