location
先复习下nginx的location
语法:
location [ = | ~ | ~* | ^~ ] uri { ... }
修饰符:
= :精确匹配(必须全部相等)
~ :大小写敏感(正则表达式)
~* :忽略大小写(正则表达式),这里要注意忽略大小写的意思是请求的字符大小写都可以,但是不会进行大小转换,请求的大小写对应的文件必须存在。
^~ :前缀匹配,表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
!~和!~*:分别为区分大小写不匹配及不区分大小写不匹配 的正则表达式
/ :通用匹配,任何请求都会匹配到。
location的匹配规则
当我们请求一个url的时候,nginx会根据配置的location来匹配该url,有时候一个url可能会匹配到多个location,那么最终会使用哪个location呢?这就取决于location的匹配顺序了。
Location匹配规则如下:
1、=是精准匹配,优先级最高,如果精确匹配,那么就会停止搜索匹配并根据精确匹配的配置处理请求
2、普通字符串匹配,按匹配的长度来取匹配结果,取匹配最长的。即请求 /blog/detail,如果有location /blog 和location /blog/detail,那么会匹配location /blog/detail
2、进行^~前缀匹配,如果匹配,那么就会停止匹配
3、对于正则匹配,从上到下进行匹配,如果有匹配,nginx就停止搜索其他匹配
4、通配location,如location /
结合标识符,匹配顺序如下:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (location /)
(精确匹配)> (最长字符串匹配,但完全匹配) >(非正则匹配)>(正则匹配)>(最长字符串匹配,不完全匹配)>(location通配)