Nginx location 匹配规则简记
Nginx 的 location 看似只是路径匹配,但前缀、精确、正则之间有优先级。理解匹配顺序,能减少很多配置上的误判。
常见类型
常见写法包括:
1 | location = /exact { } |
它们分别表示精确匹配、普通前缀匹配、优先前缀匹配、区分大小写正则、不区分大小写正则。
匹配顺序
简化理解如下:
- 先找精确匹配
=; - 再找最长前缀匹配;
- 如果最长前缀带
^~,直接使用; - 否则继续按配置顺序检查正则;
- 正则没有匹配时,使用之前找到的最长前缀。
因此普通前缀匹配不一定最终生效,正则可能覆盖它。
root 与 alias
root 会把请求 URI 拼到目录后面;alias 则用指定目录替换匹配前缀。二者语义不同,混淆时容易出现路径多一段或少一段的问题。
示例:
1 | location /static/ { |
请求 /static/a.png 会对应 /var/www/static/a.png。
1 | location /static/ { |
请求 /static/a.png 会对应 /var/www/assets/a.png。
小结
配置 location 时,可以先判断是否需要精确匹配,再决定是否需要 ^~ 阻止正则覆盖。路径映射则要分清 root 和 alias。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 xiaobai050!