本文所使用的環境資訊如下:
實踐中,nginx裡最常用的指令就是location和proxy_pass了。前者用於為不同請求uri指定不同nginx設定,後者用於匹配的location進行轉發(通常是動態內容)。關於二者的設定,有一個老生常談的話題,那便是:設定的值是否有斜槓結尾,對檔案路徑查詢(或請求轉發)行為有哪些影響?相關文章也非常多,且多數粗看一眼,照其行事,也能立即解決問題。鄙人私以為其中部分文章的說法是不嚴謹的,故特撰此文,以備己查。
不再廢話,直接上結論(如果對location和proxy_pass的功能和基本設定還不熟悉,建議先看後面的章節):
location
一般情況下,location指令不會對是否有斜槓結尾這個場景做特殊處理,除非滿足以下條件:
滿足以上條件後,也只會對一個特定的uri做特殊處理,這個uri除了沒有尾部的斜槓外,正好與location定義的字首一模一樣。對這個特殊的uri的處理方式為:返回一個301重定向,重定向的地址為:原始請求uri + /,也就是說,重定向的地址與Location字首內容完全相同 ②
範例設定如下:
location /films/nature/ {
proxy_pass http://film-server;
}
假定請求的url為http://localhost/films/nature,則location的處理方式為:返回一個301重定向,重定向的地址為http://localhost/films/naure/。與原始請求的唯一差別就是,新的uri地址比原來的uri地址尾部多了一個斜槓 /