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

CentOS7部署的Nginx1.20配置缓存后/var/nginx/cache文件夹为空如何解决

问题排查与解决方案

核心配置错误

  • 你当前配置的proxy_cache仅对使用proxy_pass的反向代理请求生效,你的站点PHP请求走的是fastcgi_pass转发到PHP-FPM,需要使用fastcgi_cache系列缓存指令,这是缓存目录为空的最主要原因。

上游响应头影响缓存

从你返回的响应头可以看到PHP默认返回了禁止缓存的头:

Cache-Control: no-store, no-cache, must-revalidate
Set-Cookie: LS-ROKZXDGTYMXRJVMG=f0ljvjpnfs0kg6m1idhkolrfho; path=/; secure; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT

Nginx默认不会缓存带有Set-Cookie头、Cache-Control为no-store/no-cache、Expires早于当前时间的响应,即使缓存指令配置正确也不会写入缓存。

权限检查

先确认/var/nginx/cache目录的所有者为nginx用户,读写权限正常,执行命令:
chown -R nginx:nginx /var/nginx/cache && chmod -R 700 /var/nginx/cache

修改后的配置示例

1. 修改http块的缓存配置

替换你原来的proxy_cache相关配置为fastcgi缓存配置:

http    {
    # 把原来的proxy_cache_path换成fastcgi_cache_path
    fastcgi_cache_path /var/nginx/cache
             levels=1:2
             keys_zone=CACHE:10m
             max_size=20g;

    # 全局或者指定location配置fastcgi缓存
    fastcgi_cache CACHE;
    fastcgi_cache_valid 200 10m;
    # 忽略上游的缓存控制头,按我们配置的规则缓存
    fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
    # 可选:添加响应头查看缓存命中状态
    add_header X-Cache-Status $upstream_cache_status;

    # 其余原有配置保持不变
    # ...
}

2. 按需配置缓存生效范围

如果不需要缓存所有PHP请求,可以把fastcgi_cache相关配置放到需要缓存的location ~ \.php$块内,避免缓存动态接口、用户中心等个性化页面。

3. 验证配置生效

修改配置后执行nginx -t检查语法,没问题执行systemctl reload nginx重载配置,再次访问站点查看响应头的X-Cache-Status字段,首次访问为MISS,第二次访问为HIT即代表缓存生效,同时可以查看/var/nginx/cache目录已经生成缓存文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:54:02