NGINX第三方HTTPS代理缓存配置后X-Cache-Status始终为MISS如何解决
NGINX代理缓存MISS问题排查修复方案
核心故障原因
你当前配置的缓存不生效和HTTPS代理参数无关,问题由以下几个配置缺失/错误导致:
- 未配置
proxy_cache_valid规则,NGINX默认无任何缓存时长规则,不会主动缓存任何上游响应 - 仅忽略了
Cache-Control响应头,未忽略Expires、Set-Cookie、Vary等会触发NGINX跳过缓存逻辑的响应头,第三方接口返回的这类头会直接禁用缓存 - 缓存状态变量混淆,日志中记录的
$http_x_cache_status是客户端请求携带的请求头参数,你配置返回的缓存状态对应的变量是$upstream_cache_status,日志取值错误导致误判 - 若需要缓存POST请求,当前
proxy_cache_key仅包含请求URI,未包含POST请求体,相同URI不同参数的请求会出现缓存逻辑异常,也可能导致缓存写入失败 - 缓存目录权限异常,
/var/cache/nginx/cache如果不属于nginx运行用户,会导致缓存文件写入失败
分步修复操作
- 补全站点配置的location块缓存规则,新增以下配置:
# 配置指定响应码的缓存时长,可根据业务需要调整时长和覆盖的响应码 proxy_cache_valid 200 206 301 302 2h; # 忽略所有会禁用缓存的上游响应头 proxy_ignore_headers Cache-Control Expires Set-Cookie Vary; # 隐藏上游返回的Set-Cookie头,避免干扰缓存逻辑 proxy_hide_header Set-Cookie;
- (可选,仅需要缓存POST请求时操作)修改缓存键规则,加入请求体特征:
proxy_cache_key $scheme$proxy_host$request_uri$request_body;
如果不需要缓存POST请求,直接将proxy_cache_methods配置中的POST参数删除即可。
3. 修正主配置文件的日志格式,将日志中的$http_x_cache_status替换为$upstream_cache_status,保证日志记录的缓存状态正确。
4. 修正缓存目录权限,执行以下命令:
chown -R nginx:nginx /var/cache/nginx/cache chmod -R 755 /var/cache/nginx/cache
- 校验配置无报错后重载NGINX:
nginx -t && nginx -s reload
验证方法
连续两次发起相同的接口请求,查看第二次响应头的X-Cache-Status字段,若返回HIT则说明缓存已生效,同时检查/var/cache/nginx/cache目录下已生成缓存文件。
内容的提问来源于stack exchange,提问作者justinavery
相关产品推荐
相关产品推荐

