有人能解释一下为什么它不能像人们期望的那样工作吗?在下面的 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;
...
}
}
答案1
是的,nginx 必须选择一个位置,这样即使您嵌套这些位置,它也不会稍后报告匹配。当您使用~^
运算符时,您告诉 nginx 避免查看正则表达式位置块,如果它是与当前请求 URI 匹配的最长前缀位置块。
我在这里解释了整个过程:Nginx 重写规则 403 错误。