1. 程式人生 > >Nginx location配置 正則表示式

Nginx location配置 正則表示式

一、 location 的匹配符

Syntax:


location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
  1.  語法格式:location [=|~|~*|^~|@]   /uri/ { … } ,
       依據不同的字首“= ”,“^~ ”,“~ ”,“~* ”和不帶任何字首的(因為[ ] 表示可選,可以不要的),表達不同的含義, 
      簡單的說盡管location 的/uri/ 配置一樣,但字首不一樣,表達的是不同的指令含義。
        注意:查詢字串不在URI範圍內。例如:/films.htm?fid=123 的URI 是/films.htm 。)2
.對這些不同字首,分下類,就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 )