# 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. 再然后判断正则表达式的解析过程,按配置里的正则表达式顺序为准,由上到下开始匹配,一旦匹配成功立即返回结果并结束解析过程。
通过上面的分析我们可以知道:
* 普通匹配与顺序无关,因为按照匹配的长短来取匹配结果。
* 正则匹配与顺序有关,因为是从上往下匹配。(首先匹配,取其之。结束解析过程)