# Nginx的location詳解
[TOC]
## location語法
~~~
location [=|~|~*|^~] patt {
}
~~~
>[info] **參數解釋:**
= 開頭表示精確匹配
^~ 開頭表示uri以某個常規字符串開頭,理解為匹配url路徑即可。nginx不對url做編碼,因此請求為/static/20%/aa,可以被規則^~ /static/ /aa匹配到(注意是空格)。
~ 開頭表示區分大小寫的正則匹配
~* 開頭表示不區分大小寫的正則匹配
!~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配的正則
/ 通用匹配,任何請求都會匹配到。
## location匹配類型
### location匹配之精準匹配
~~~
location = / {
#規則A
}
location = /login {
#規則B
}
~~~
### location匹配之正則匹配
~~~
location ^~ /static/ {
#規則C
}
location ~ \.(gif|jpg|png|js|css)$ {
#規則D
}
location ~* \.png$ {
#規則E
}
location !~ \.xhtml$ {
#規則F
}
location !~* \.xhtml$ {
#規則G
}
~~~
### location匹配之一般匹配
~~~
location / {
#規則H
}
~~~
## location配置優先級
1. 先判斷精準匹配,如果匹配,立即返回結果并結束解析過程
2. 然后,判斷普通命中沒如果有多個命中,**記錄最長**的匹配結果
3. 再然后判斷正則表達式的解析過程,按配置里的正則表達式順序為準,由上到下開始匹配,一旦匹配成功立即返回結果并結束解析過程。
通過上面的分析我們可以知道:
* 普通匹配與順序無關,因為按照匹配的長短來取匹配結果。
* 正則匹配與順序有關,因為是從上往下匹配。(首先匹配,取其之。結束解析過程)