Location 决定 Nginx 如何处理某个路径。看起来更具体的规则不一定胜出:精确匹配、前缀和正则表达式的优先级不同。
从三个规则开始
以下 location 位于同一个 server 块的同一层级:
nginx
location = /health { return 200 "health"; }
location /images/ { return 200 "images"; }
location ~ \.jpg$ { return 200 "jpg"; }
Location 决定 Nginx 如何处理某个路径。看起来更具体的规则不一定胜出:精确匹配、前缀和正则表达式的优先级不同。
以下 location 位于同一个 server 块的同一层级:
location = /health { return 200 "health"; }
location /images/ { return 200 "images"; }
location ~ \.jpg$ { return 200 "jpg"; }
一个包含详细解答的 IT 面试题库——从初级到高级。
捐赠/health 返回 health:= 表示精确匹配,匹配成功便立即结束选择。/images/cat.png 返回 images:前缀匹配,而正则表达式不匹配。/images/cat.jpg 返回 jpg:正则表达式优先于普通前缀。把 location /images/ 改为 location ^~ /images/。如果它是最长的匹配前缀,Nginx 会跳过该层级的正则表达式检查,因此 /images/cat.jpg 现在返回 images。
对于这种平铺配置:先找精确匹配;否则记住最长前缀,然后使用第一个匹配的正则表达式,除非 ^~ 阻止该检查。查询参数不参与匹配。嵌套 location 和内部重定向会增加选择步骤,需要单独测试。
官方文档.