核心是Nginx工作进程因权限不足被系统拦截,需确认error.log中(13: Permission denied)报错,逐级检查路径属主、属组及每层x权限,确保proxy_cache_path与proxy_temp_path同文件系统且SELinux等安全模块未静默阻止。

缓存文件无法写入,核心是 Nginx 工作进程被系统权限机制拦在门外——不是配置没生效,而是连目录都进不去、文件都建不了。关键看 error.log 里是否出现 (13: Permission denied),这是最直接的信号。
盯住 error.log 中的具体路径和错误码
打开 /var/log/nginx/error.log,搜索含 Permission denied 的行,重点关注括号里的数字 13:
-
[error] open() "/var/cache/nginx/proxy_temp/0000000001" failed (13: Permission denied)→ 临时文件目录不可写 -
[error] stat() "/var/cache/nginx" failed (13: Permission denied)→ 缓存主目录不可读或不可进入(缺 x 权限) - 哪怕只是
/var/cache这一级权限不对,整个子路径都会失败
逐级检查路径归属与执行权限
用 namei -l /var/cache/nginx/proxy_temp 一次性看清从根目录到目标的每一级属主、属组和权限。重点确认:
- Nginx worker 进程用户(
ps aux | grep nginx查第三列,如nginx或www-data)必须是某级目录的 owner,或属于其 group - 从
/开始,每一级父目录都必须有 x 权限(如drwxr-xr-x可以,drw-r--r--不行) - 目标目录本身需有 w 权限,且所属匹配
核对 proxy_cache_path 和 proxy_temp_path 是否一致且可写
这两个路径必须满足三个硬性条件:
- 在同一挂载点(
df -P /var/cache/nginx /usr/local/nginx/proxy_temp验证) - 未被注释或意外指向
/tmp等只读/独立分区 - 所在磁盘未满(
df -h)、Inode 未耗尽(df -i)、挂载选项不含noexec或nosuid
修复示例:sudo chown -R nginx:nginx /var/cache/nginxsudo chmod -R u+rwX,g+rwX,o-rwx /var/cache/nginx
排查 SELinux 或 AppArmor 干预
在 CentOS/RHEL/Alpine 等系统上,即使权限全对,也可能被安全模块静默拦截:
- 运行
sudo sestatus -v,若为enforcing,临时放开:sudo setsebool -P httpd_write_content 1 - 长期方案:打 SELinux 上下文标签:
sudo semanage fcontext -a -t httpd_cache_t "/var/cache/nginx(/.*)?",再执行sudo restorecon -Rv /var/cache/nginx - Ubuntu 系统查 AppArmor:
aa-status | grep nginx











