Nginx
防止在 nginx 中重定向埠更改
我目前有 nginx 設置來通過 Varnish 提供內容。Nginx 監聽 8000 埠,varnish 將使用者的請求從 80 連接到 8000。
問題是,在某些情況下,特別是在嘗試訪問目錄時,例如
site.com/2010
nginx 將請求重定向到site.com:8000/2010/
.我怎樣才能防止這種情況?
通過更仔細地閱讀HttpCoreModule 文件,我找到了這個問題的答案。
port_in_redirect off;
這將保留客戶端在重定向期間使用的埠。密切相關的是
server_name_in_redirect
使用第一個主機名進行重定向。因為我不希望 sitename.v.myserver.com 重定向到 sitename.com,
我的情況是 nginx 監聽
80
docker 容器內的埠,但它被映射到8080
容器外的埠(或任何隨機埠)。中間沒有反向代理可以為埠添加適當的標頭,也不想在 nginx 配置中對其進行硬編碼。錯誤重定向範例:
http://localhost:8080/directory -> http://localhost/directory/
我試過:
server { # ... port_in_redirect off; server_name_in_redirect off; # ... }
但是沒有用。唯一運作良好的是:
server { # ... absolute_redirect off; # ... }
手動輸入
absolute_redirect
說:如果禁用,nginx 發出的重定向將是相對的。
我發現這更靈活,並且不需要您在任何地方硬編碼伺服器名稱和埠。
如果您擔心使用相對 URL 進行重定向,請查看此評論。