![为什么 nginx 选择具有不匹配正则表达式的位置块?](https://linux22.com/image/712262/%E4%B8%BA%E4%BB%80%E4%B9%88%20nginx%20%E9%80%89%E6%8B%A9%E5%85%B7%E6%9C%89%E4%B8%8D%E5%8C%B9%E9%85%8D%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E4%BD%8D%E7%BD%AE%E5%9D%97%EF%BC%9F.png)
在我的 nginx 配置文件中我有这个location
块(为了调试目的进行了修改):
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
expires 1;
log_not_found off;
return 515 "Request URI is $request_uri. Caught you";
}
当我从服务器请求此 URI 时:
/img/signup/be0e1d34fabf2514d49db9baec09f858.png?w=198&h=198&s=9a7d22504c5ae176a936a0f18cccacba
果然,它匹配了,我收到了一个 515 响应,其内容如下:
Request URI is /img/signup/be0e1d34fabf2514d49db9baec09f858.png?w=198&h=198&s=9a7d22504c5ae176a936a0f18cccacba. Caught you
为什么?正则表达式不匹配,至少直观上不匹配(要么以问号结尾,后跟一系列数字,要么以.png
等等结尾),当我在Regex101.com。
答案1
Nginx 实际上并未匹配问号后面的部分。这些是查询参数。Nginx 仅看到路径末尾 ( .png
)。由于情况如此,因此匹配得很好。