为什么我的Nginx反向代理缓存配置无法正常缓存响应内容?
Nginx反向代理缓存不生效原因及解决方案
核心问题原因
- 缺少显式缓存有效期配置
Nginx默认不会缓存无明确缓存有效期的响应,当前配置存在两个不符合缓存触发条件的点:- 上游静态服务返回的响应头未携带
Cache-Control/Expires类的缓存有效期标识 - 反向代理配置中没有添加
proxy_cache_valid参数指定响应码的缓存时长
- 上游静态服务返回的响应头未携带
- 配置参数写法错误
proxy_cache_path中的inactive参数是时间类型,单位需要用小写字母,你写的inactive=2M是无效写法:小写m代表分钟,大写M是容量单位,会导致该配置项实际生效逻辑异常。 - 可能存在目录权限问题
/tmp/cache目录如果是root用户手动创建的,Nginx运行进程(通常为www-data用户)没有写入权限,就算配置正确也无法生成缓存文件。
修复步骤
- 修正
proxy_cache_path配置的参数写法,将inactive=2M改为inactive=2m - 在反向代理的
location /块中添加proxy_cache_valid配置,示例:
location / { proxy_pass http://127.0.0.1:8080; proxy_cache one; # 新增配置:缓存200、304状态码的响应1小时 proxy_cache_valid 200 304 1h; }
- 修正缓存目录权限,执行以下命令:
sudo chown www-data:www-data /tmp/cache sudo chmod 755 /tmp/cache
- 重启Nginx使配置生效,重新请求资源后即可在
/tmp/cache目录下看到缓存条目。
内容的提问来源于stack exchange,提问作者Shane Bishop
相关产品推荐
相关产品推荐

