nginx location 匹配测试
输入 location 配置与一个 URI,看 nginx 实际会命中哪一条,并给出完整的判定过程。
匹配结果
location ~ ^/api/v[0-9]+/users {
命中原因:正则按配置顺序逐条尝试,这条是第一个命中的
L17
判定过程
- 1精确匹配location = / {不命中
- 2前缀匹配location / {最长
- 3前缀匹配location ^~ /static/ {不命中
- 4前缀匹配location /api/ {最长
- 5正则匹配location ~* \.(jpg|png|gif)$ {不命中
- 6正则匹配location ~ ^/api/v[0-9]+/users {命中
顺序是死的:先全部精确匹配,再找最长前缀,前缀带 ^~ 就结束;否则按配置文件里的顺序试正则,第一个命中的生效;正则都不中才回到最长前缀。
最容易踩的坑:写了 `location /api/` 再写 `location ~ ^/api/v[0-9]+`,看起来前缀更具体,实际是正则赢——正则的优先级高于普通前缀。想让前缀赢就加 ^~。
这里只模拟一层的 location。嵌套 location 的规则更绕(外层前缀内的正则优先于外层本身),生产中遇到再单独分析。
评论
还没有评论,来说两句吧