nginx location 的路由規則

~      #波浪線表示執行一個正則匹配,區分大小寫
~*    #表示執行一個正則匹配,不區分大小寫
^~    #^~表示普通字符匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄
=      #進行普通字符精確匹配
@     #"@" 定義一個命名的 location,使用在內部定向時,例如 error_page, try_files

 

location 匹配的優先級(與location在配置文件中的順序無關)
= 精確匹配會第一個被處理。如果發現精確匹配,nginx停止搜索其他匹配。
普通字符匹配,正則表達式規則和長的塊規則將被優先和查詢匹配,也就是說如果該項匹配還需去看有沒有正則表達式匹配和更長的匹配。
^~ 則只匹配該規則,nginx停止搜索其他匹配,否則nginx會繼續處理其他location指令。
最後匹配理帶有"~"和"~*"的指令,如果找到相應的匹配,則nginx停止搜索其他匹配;當沒有正則表達式或者沒有正則表達式被匹配的情況下,那麼匹配程度最高的逐字匹配指令會被使用。

 

location 優先級官方文檔

  1. Directives with the = prefix that match the query exactly. If found, searching stops.
  2. All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
  3. Regular expressions, in order of definition in the configuration file.
  4. If #3 yielded a match, that result is used. Else the match from #2 is used.
  1. =前綴的指令嚴格匹配這個查詢。如果找到,停止搜索。
  2. 所有剩下的常規字符串,最長的匹配。如果這個匹配使用^〜前綴,搜索停止。
  3. 正則表達式,在配置文件中定義的順序。
  4. 如果第3條規則產生匹配的話,結果被使用。否則,使用第2條規則的結果。

    location  = / {
      # 只匹配"/".
      [ configuration A ] 
    }
    location  / {
      # 匹配任何請求,因爲所有請求都是以"/"開始
      # 但是更長字符匹配或者正則表達式匹配會優先匹配
      [ configuration B ] 
    }
    location ^~ /images/ {
      # 匹配任何以 /images/ 開始的請求,並停止匹配 其它location
      [ configuration C ] 
    }
    location ~* .(gif|jpg|jpeg)$ {
      # 匹配以 gif, jpg, or jpeg結尾的請求. 
      # 但是所有 /images/ 目錄的請求將由 [Configuration C]處理.   
      [ configuration D ] 
    } 

 

二、 root和alias的區別

nginx指定文件路徑有兩種方式root和alias,這兩者的用法區別,使用方法總結了下,方便大家在應用過程中,快速響應。root與alias主要區別在於nginx如何解釋location後面的uri,這會使兩者分別以不同的方式將請求映射到服務器文件上。

[root]
語法:root path
默認值:root html
配置段:http、server、location、if

[alias]
語法:alias path
配置段:location

root實例: 

location ^~ /t/ {
     root /www/root/html/;
}

如果一個請求的URI是/t/a.html時,web服務器將會返回服務器上的/www/root/html/t/a.html的文件。

 

alias實例:

location ^~ /t/ {
 alias /www/root/html/new_t/;
}

如果一個請求的URI是/t/a.html時,web服務器將會返回服務器上的/www/root/html/new_t/a.html的文件。注意這裏是new_t,因爲alias會把location後面配置的路徑丟棄掉,把當前匹配到的目錄指向到指定的目錄。
注意:

1. 使用alias時,目錄名後面一定要加"/"。
3. alias在使用正則匹配時,必須捕捉要匹配的內容並在指定的內容處使用。
4. alias只能位於location塊中。(root可以不放在location中)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章