nginx 中 location 优先级的问题

查看 86|回复 4
作者:Hopetree   
我有一份配置:
server {
    listen 12080;
    server_name abc.com;
    access_log  /var/log/nginx/test.access.log;
    error_log   /var/log/nginx/test.error.log;
    location ~* \.png$ {
        return 402;
    }
    location / {
        return 400;
    }
    location /static/js/css/ {
        return 405;
    }
    location ^~ /static/ {
        return 401;
    }
    location ^~ /static/js/ {
        return 404;
    }
    location = /static/abc.png {
        return 403;
    }
}
为什么/static/js/css/4.png 返回 402 ,而/static/js/4.png 返回 404 ?正则的优先级不是很低吗,第一个为什么是正则生效,并且/static/js/css6/4.png 又是 404 ,第一个地址和第 3 个地址为什么会出现不同的匹配生效?

Location, Static, return, Nginx

sundong   
`=` 开头表示精确匹配 ,如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
`^~` 开头表示 uri 以某个常规字符串开头,不是正则匹配
`~` 开头表示区分大小写的正则匹配;
`~*` 开头表示不区分大小写的正则匹配
`/` 通用匹配, 如果没有其它匹配,任何请求都会匹配到
Hopetree
OP
  
@sundong /static/js/css/4.png 按照^~优先不是应该匹配到 404 那条吗,怎么会到 402 的正则,然后/static/js/css6/4.png 又匹配的是正则,这两个的区别是啥导致的?
Huelse   
= > ^~ > ~/~* > 空格
dzdh   
https://github.com/nginx/nginx/blob/master/src/http/ngx_http_core_module.c#L3087
不懂 c ,但是看个大概齐
先判断 location 参数? 3 个优先?三个参数的时候,优先级是 =、^~、~、~*、
else 不是三个参数,优先级:=、^~、~(如果还有后续参数*?)
您需要登录后才可以回帖 登录 | 立即注册

返回顶部