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