缓存路径必须真实存在、结构合理、权限正确、适配环境,推荐使用nginx主目录下的专用子路径并配置levels=1:2、chown www:www、use_temp_path=off。

缓存存放位置不能随便填个路径就完事,必须满足真实存在、结构合理、权限正确、适配环境四个硬性条件,否则缓存写不进去,Nginx 也不会报错,只会静默失效。
路径必须是专用子目录,不能用临时目录
不要选 /tmp、/dev/shm 或相对路径(如 cache/),这些地方容易因 SELinux 策略、挂载选项或权限隔离导致写入失败。推荐使用 Nginx 主目录下的独立子路径:
- 宝塔环境:/www/server/nginx/cache/fastcgi
- phpEnv 环境:/www/phpenv/nginx/fastcgi_cache
- 通用建议:/var/cache/nginx/fastcgi(需提前创建并授权)
目录结构要带两级哈希,避免 inode 过载
levels=1:2 不是可选项,而是性能必需。它让 Nginx 把缓存文件按哈希值分散到类似 a/ab/xxx 的多级子目录中,单目录文件数可控,百万级缓存仍保持低延迟。如果省略或设为 levels=0,所有文件挤在根缓存目录下,高并发时极易卡顿甚至失败。
权限必须由 www 用户完全掌控
Nginx worker 进程默认以 www 用户运行(不是 root 或 www-data),所以缓存目录及其所有父级必须归属该用户:
- 创建目录:
sudo mkdir -p /www/server/nginx/cache/fastcgi - 赋权:
sudo chown -R www:www /www/server/nginx/cache/fastcgi - 设权限:
sudo chmod -R 755 /www/server/nginx/cache/fastcgi - 验证可写:
sudo -u www touch /www/server/nginx/cache/fastcgi/test,无报错才算真正生效
use_temp_path=off 是防失败的关键开关
默认情况下,Nginx 先把缓存写到临时目录(如 /tmp),再移动到最终路径。但临时目录常不可写或空间不足,导致缓存始终 MISSED。加一句 use_temp_path=off,让 Nginx 直接写入目标路径,跳过中转环节,大幅降低写入失败概率。











