Nginx location配置 正則表示式
一、 location 的匹配符 Syntax: | location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } |
---|
依據不同的字首“= ”,“^~ ”,“~ ”,“~* ”和不帶任何字首的(因為[ ] 表示可選,可以不要的),表達不同的含義,
簡單的說盡管location 的/uri/ 配置一樣,但字首不一樣,表達的是不同的指令含義。
注意:查詢字串不在URI範圍內。例如:/films.htm?fid=123 的URI 是/films.htm 。)2
正則location ,英文說法是location using regular expressions
普通location ,英文說法是location using literal strings 。
那麼其中“~ ”和“~* ”字首表示正則location ,“~ ”區分大小寫,“~* ”不區分大小寫;
其他字首(包括:“=”,“^~ ”和“@ ”)和 無任何字首 都屬於普通location 。詳細說明:
~ 區分大小寫匹配
~* 不區分大小寫匹配
!~ 區分大小寫不匹配
!~* 不區分大小寫不匹配
^ 以什麼開頭的匹配
$ 以什麼結尾的匹配
* 代表任意字元
檔案及目錄匹配
-f和!-f用來判斷是否存在檔案
-d和!-d用來判斷是否存在目錄
-e和!-e用來判斷是否存在檔案或目錄
-x和!-x用來判斷檔案是否可執行
3.匹配符優先順序
1.=
2.空匹配符,滿足精確匹配時
3.^~
4.~或~*
5.空匹配符,滿足以指定模式開始時的匹配時
匹配規則是:最大字首匹配(與順序無關)
如果恰好是嚴格精確匹配結果或者加有字首“ ^~ ”或“ = 則停止搜尋正則 location
對於正則 location 的匹配規則是:按編輯順序逐個匹配(與順序有關)
只要匹配上,就立即停止後面的搜尋
例項分析:
location = / { configuration A }
# = 表示精確的查詢地址,如location = / 它只會匹配uri為/的請求,
如果請求為/index.html,將查詢另外的location,而不會匹配這個,
當然可以寫兩個location,location = /和location /,這樣/index.html將匹配到後者
如果你的站點對/的請求量較大,可以使用這個方法來加快請求的響應速度。
location / { configuration B }
# 遵守普通location 的最大字首匹配,由於任何URI 都必然以“/ ”根開頭,所以對於一個URI ,如果有更specific 的 匹配,那自然是選這個更specific 的,如果沒有,“/ ”一定能為這個URI 墊背(至少能匹配到“/ ”),也就是說“ location / {} ”有點預設配置的味道,其他更specific的配置能覆蓋overwrite 這個預設配置
(這也是為什麼我們總能看到location / {} 這個配置的一個很重要的原因)
location ^~ /images/ { configuration C }
# 匹配任何已/images/開頭的查詢並且停止搜尋。任何正則表示式將不會被測試。
location ~* .(gif|jpg|jpeg)$ { configuration D }
# 匹配任何已.gif、.jpg 或 .jpeg 結尾的請求,但是 所有 /images/開頭的請求 會匹配到 configuration C
location @named { configuration E }
#它是專門用來處理“內部重定向(internally redirected )