nginx优先考虑嵌套位置而不是外部位置块

Mah*_*dsi 1 nginx

有人可以解释为什么这不像人们期望的那样工作吗?在下面的 nginx 配置中,假设第一个 nginx 将与正则表达式匹配的图像扩展块一起使用,并且只有在此之后它才会进入^~优先于其他所有内容的内部块。

无论范围如何,nginx 似乎都在着眼于更大的图景,并且^~ /images在外部正则表达式扩展块之前匹配诸如/images/something.png?

location ~* \.(css|js|jpg|png|gif|ico)$ {
    expires 7d;
    add_header Image-By-Extension 1;
}

location / {
    location ^~ /images {
        add_header Image-By-Folder 1;
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

Xav*_*cas 5

是的,nginx 必须选择一个位置,因此即使您正在嵌套这些位置,它也不会在稍后报告匹配项。当您使用~^运算符时,您告诉 nginx 避免查看正则表达式位置块,如果它是与当前请求 URI 匹配的最长前缀位置块。

我在这里解释了整个过程:Nginx 重写规则 403 错误