如果没有处理好优先级就可能会造成安全漏洞。
如:本来打算禁止的访问被其它规则匹配上放行了。
location的匹配规则大概分三大类
- =开头表示精确匹配,只有完全匹配上才能生效。
- 普通字符匹配。只要Url包含匹配前缀字符就行。
- 正则表达式匹配。
location匹配顺序的优先级如下:
- "="前缀指令匹配,如果匹配成功,则停止其他匹配。这优先级最高
- ^~ 前缀的普通字符串匹配。匹配成功后停止其它匹配。
- 正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配
- 普通字符串指令匹配,顺序是从长到短。(长的包含短的,以长的优先)
注意点
普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,nginx会根据配置的长短来进行匹配。
但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。
但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。
匹配模式写法,和顺序
- location = /test =开头表示精确匹配,只有完全匹配上才能生效。
- location ^~ /test ^~ 开头对URL路径进行前缀匹配。
- location ~ pattern ~开头表示区分大小写的正则匹配。
- location ~* pattern ~*开头表示不区分大小写的正则匹配。
- location /test 不带任何修饰符,也表示前缀匹配。
- location / 保底匹配,任何未匹配到其它location的请求都会匹配到