Nginx缓存权限问题本质是工作用户对缓存路径缺少可进入(x)和可写入(w)权限,需逐级检查属主、属组及每层目录的x权限,并统一proxy_cache_path与proxy_temp_path路径且确保同文件系统。

看到 error.log 里出现 Permission denied 并指向缓存相关路径(比如 /var/cache/nginx 或 /usr/local/nginx/proxy_temp),基本可以确定是 Nginx 缓存功能因权限问题被卡住,不是配置写错,而是系统层面拦住了读写动作。
盯住日志里的具体路径和错误码
缓存权限报错通常长这样:
-
[error] open() "/var/cache/nginx/proxy_temp/0000000001" failed (13: Permission denied)→ 缓存临时目录不可写 -
[error] stat() "/var/cache/nginx" failed (13: Permission denied)→ 缓存主目录不可读/不可进入(缺 x 权限) -
connect() to unix:/run/php/php8.2-fpm.sock failed (13: Permission denied)→ 虽然不是缓存目录,但常和缓存环境共存,说明套接字权限也需同步检查
括号中的 (13: Permission denied) 是 Linux 系统级错误,可信度高,不用怀疑是误报。
确认 Nginx 工作用户与目录属主是否匹配
运行 ps aux | grep nginx,看 worker process 的用户名(如 www-data、nginx 或 _www)。再用 ls -ld 检查缓存目录归属:
ls -ld /var/cache/nginx /usr/local/nginx/proxy_temp- 输出中第三列(属主)和第四列(属组)必须和上面查到的 worker 用户一致
- 如果属主是
root,而 worker 是www-data,那就必然失败
检查整条路径的执行权限(x 权限不能漏)
Linux 要求从 / 开始,每一级父目录都得有 x 权限,Nginx 才能“走进去”。只改目标目录权限不够。
用这个命令一次性看清全路径权限断点:
namei -l /var/cache/nginx- 重点看中间某一级是不是
drwxr-x---(others 没 x),哪怕只是/var/cache这一级没 x,整个/var/cache/nginx就进不去
核对 proxy_cache_path 和 proxy_temp_path 是否同文件系统且可写
Nginx 缓存要求两个目录必须在同一个挂载点下,否则无法原子移动临时文件。常见坑:
-
proxy_cache_path指向/var/cache/nginx,但proxy_temp_path被注释或默认落到/tmp(不同磁盘) -
/var/cache/nginx所在分区已满,或挂载为noexec/nosuid,也会触发 13 错误 - 修复方法:统一指定两者路径,并确保属主+权限正确,例如:
chmod -R 755 /var/cache/nginx


















