You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx日志排除.json扩展名失败,多规则冲突如何解决?

问题原因及解决方法

没错,问题就出在那两条独立的.json规则上。Nginx处理正则型location的逻辑是:按配置文件里的顺序依次匹配,只要找到第一个能匹配请求的正则location,就会完全使用它的配置,后续同类型规则不再生效。

你的情况是,针对.json文件存在两条正则匹配规则:一条是关闭访问日志,另一条是添加缓存头。不管这两条规则的顺序如何,都会导致其中一条的配置被忽略——比如如果添加缓存头的规则在前,请求匹配到它之后,就不会再应用后面关闭日志的规则;反之如果关闭日志的规则在前,缓存头的配置就不会生效。

解决步骤

把两条规则合并到同一个location块里,同时配置access_log off和add_header:

location ~* \.(woff|jpg|jpeg|png|gif|ico|css|js|json)$ {
    access_log off;
    add_header Cache-Control "must-revalidate";
}

或者如果你想把.json单独拆分出来(比如后续有其他专属配置),也可以单独写一个.json的location,同时包含两个配置:

# 先处理其他静态资源
location ~* \.(woff|jpg|jpeg|png|gif|ico|css|js)$ {
    access_log off;
}

# 单独处理json,同时关闭日志+添加缓存头
location ~* \.json$ {
    access_log off;
    add_header Cache-Control "must-revalidate";
}

这样就能同时实现关闭.json文件的访问日志,以及添加指定的缓存头了。

注意:如果你的配置里还有其他可能匹配.json请求的location(比如前缀匹配的/api/之类的),要确保正则匹配的location优先级更高——不过这里用的是~*正则匹配,优先级高于普通前缀匹配,所以只要顺序没问题就不会有问题。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:35:19