nginx 不需要的位置重定向,帶有尾部斜杠

nginx 不需要的位置重定向,帶有尾部斜杠

我有一個位置

location /pass/ {
    proxy_pass http://localhost:12345/;
}

所以它應該代理http://example.com/pass/whateverurlhttp://localhost:12345/whatever

我不喜歡的是 nginx 會自動添加斜杠

http://example.com/pass

http://example.com/pass/並透過 301 重定向實現

我怎樣才能簡單地避免這種行為。我想要/pass不帶尾部斜槓去另一個位置。先致謝!

答案1

有一種特殊情況,以 in 結尾的 aproxy_passlocation導致/自動隱式301重定向,而無需轉到後端;您必須建立一個location不帶尾部斜線的明確以避免這種情況:

如果位置由以斜線字元結尾的前綴字串定義,並且請求由 proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pa​​ss 或 grpc_pass 之一處理,則執行特殊處理。為了回應 URI 等於此字串但沒有尾部斜線的請求,將傳回帶有代碼 301 的永久重定向到所請求的 URI,並附加斜線。如果不需要這樣做,可以像這樣定義 URI 和位置的精確匹配:

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

例如,/pass location除了現有的之外,您還必須建立一個明確的/pass/,否則,location /pass {return 301 /pass/…;}將為您建立一個隱式的。

然而,你確定你真的想做你想做的事嗎?如果您要省略從/passto 的重定向/pass/,則相對路徑將無法運作。一些較新的瀏覽器也傾向於具有缺陷的 UI/UX,可能不會向用戶顯示尾部斜杠,這可能會使在嘗試解決差異問題時變得更加混亂。

答案2

正如你想要的那樣另一個地點,一個自然的解決方案是添加該位置

location /pass {
}

預設情況下,nginx 將在 Web 根目錄中尋找名為「pass」的檔案。如果您不喜歡這個預設值,您可以在這個新的位置區塊中添加更多指令來實現這一點。

您也可以使用

location = /pass {
}

這樣 nginx 就能更快找到匹配項。

相關內容