Nginx

防止在 nginx 中重定向埠更改

  • November 24, 2021

我目前有 nginx 設置來通過 Varnish 提供內容。Nginx 監聽 8000 埠,varnish 將使用者的請求從 80 連接到 8000。

問題是,在某些情況下,特別是在嘗試訪問目錄時,例如site.com/2010nginx 將請求重定向到site.com:8000/2010/.

我怎樣才能防止這種情況?

通過更仔細地閱讀HttpCoreModule 文件,我找到了這個問題的答案。

port_in_redirect off;

這將保留客戶端在重定向期間使用的埠。密切相關的是server_name_in_redirect使用第一個主機名進行重定向。因為我不希望 sitename.v.myserver.com 重定向到 sitename.com,

我的情況是 nginx 監聽80docker 容器內的埠,但它被映射到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 進行重定向,請查看此評論

引用自:https://serverfault.com/questions/227742