今天深入研究了下nginx的location的用法,已經一些需要注意的細節,現在做乙個歸納總結,以備後面查詢。
location匹配的是nginx的哪個變數?
$request_uri
location的匹配種類有哪些?格式 location [ 空格 | = | ~ | ~* | !~ | !~* ] /uri/ {}
# 精確匹配: 相等(=)
# 字串匹配: 字串匹配(空格) 匹配開頭(^~)
# 正則匹配: 區分大小寫匹配(~) 不區分大小寫匹配(~*) 區分大小寫不匹配(!~) 不區分大小寫不匹配(!~*)
location搜尋優先順序優先順序如何?精確匹配 > 字串匹配( 長 > 短 [ 注: ^~ 匹配則停止匹配 ]) > 正則匹配( 上 > 下 )
# 精確匹配只能命中乙個
# 字串匹配使用匹配最長的最為匹配結果
# 正則匹配按照location定義的順序進行匹配,先定義具有高優先順序
特別注意:
舉例說明
( 這裡使用了 echo-nginx-module 模組,方便做輸出測試 )
精確匹配
location = /images/test.png
location /images/test.png
location \/images\/test\.png$
如果此時請求 會輸出什麼呢?
輸出 config1, 毋容置疑,精確匹配優先順序最高!
精確匹配的特殊情況
location = /
location /
此時是輸入 會輸出什麼呢?
是輸出 config2, 怎麼精確匹配的優先順序不靈了呢?
是這樣的,精確匹配還是起作用了,請求目錄(非具體檔案),nginx會將請求內部定向到index檔案,
既此時真正的請求是/index.html, 這是 config2則被命中!
所以精確匹配不要用來匹配 /
字串搜尋與正則搜尋
location /images/test.png
location ^~ /images/
location ~ \/images\/test\.png$
location ~ \/images\/
如果此時請求 會輸出什麼呢?
當然是 config3,正則命中
(雖然 config1 為最長匹配的字串,此時只做記錄,後面還要搜尋正則匹配,則config3正則匹配命中),
仔細觀察可以發現config4也被匹配成功了,但是正則的匹配順序是按照location的定義順序匹配的,所以config3命中.
字串匹配優先順序的提公升( ^~ )
location /images/
location ^~ /images/test.png
location ~ /images/test\.png$
location ~ \/images\/
如果此時請求 會輸出什麼呢?
當然是config2, 首部匹配命中
(因為字串匹配是優先搜尋的,此時發現config2 為最長的字串匹配且為^~匹配方式,所以停止搜尋正則,直接命中!)
# 所以這裡的 ^~ 符號比較特殊,就是為了提高字串匹配的優先順序,優先於正則匹配.
Nginx配置基礎 location
location表示式型別 表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配。使用字首匹配。如果匹配成功,則不再匹配其他location。進行普通字元精確匹配。也就是完全匹配。常規字串匹配。按字首匹配。它定義乙個命名的 location,使用在內部定向時,例如 ...
nginx配置location總結
上 多的不說了,配了很多,終於起效了。對nginx 來說,實現的方法很簡單,只要在location段中,使用 expires 就可以了 格式expires 30s 表示把資料快取30秒 expires 30m 表示把資料快取30分 expires 10h 表示把資料快取10小時 expires 1d...
nginx配置命令 location配置
波浪線表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄。進行普通字元精確匹配。定義乙個命名的 location,使用在內部定向時,例如 error page,try files。按配置檔案順序搜尋下...