nginx location 匹配测试

输入 location 配置与一个 URI,看 nginx 实际会命中哪一条,并给出完整的判定过程。

匹配结果

location ~ ^/api/v[0-9]+/users {

命中原因:正则按配置顺序逐条尝试,这条是第一个命中的

L17

判定过程

  1. 1精确匹配location = / {不命中
  2. 2前缀匹配location / {最长
  3. 3前缀匹配location ^~ /static/ {不命中
  4. 4前缀匹配location /api/ {最长
  5. 5正则匹配location ~* \.(jpg|png|gif)$ {不命中
  6. 6正则匹配location ~ ^/api/v[0-9]+/users {命中

顺序是死的:先全部精确匹配,再找最长前缀,前缀带 ^~ 就结束;否则按配置文件里的顺序试正则,第一个命中的生效;正则都不中才回到最长前缀。

最容易踩的坑:写了 `location /api/` 再写 `location ~ ^/api/v[0-9]+`,看起来前缀更具体,实际是正则赢——正则的优先级高于普通前缀。想让前缀赢就加 ^~。

这里只模拟一层的 location。嵌套 location 的规则更绕(外层前缀内的正则优先于外层本身),生产中遇到再单独分析。

评论

登录后即可参与评论

还没有评论,来说两句吧