Nginx 中怎么排查 proxy_cache 缓存目录权限导致无法写入的问题

夏晨小哥_3114

夏晨小哥_3114

2026-10-25

836人浏览

原创

核心是确认nginx工作用户对缓存路径及其所有父目录具备x(进入)和w(写入)权限,报错(13: permission denied)表明系统级权限拦截;需依次检查user指令、ps验证实际用户、ls -ld确认属主与权限、逐级验证x权限、chown/chmod修复、sudo -u模拟测试,并排查selinux/apparmor限制。

nginx 中怎么排查 proxy_cache 缓存目录权限导致无法写入的问题

排查 Nginx proxy_cache 缓存目录权限问题,核心是确认 Nginx 工作进程(通常是 www-data、nginx 或 daemon 用户)对缓存路径及其父目录拥有读、写、执行权限。权限不足时,Nginx 日志中通常会出现 open() "/path/to/cache/xxx" failed (13: Permission denied) 类错误。

检查 Nginx 运行用户和缓存路径归属

先确认 Nginx 是以哪个用户身份运行:

  • 查看主配置文件(如 /etc/nginx/nginx.conf)开头的 user 指令,例如:user www-data;;若未设置,默认为 nobody(Linux 下常为 nginx 或 www-data)
  • 用命令验证实际运行用户:ps -eo user,comm | grep nginx | grep -v grep
  • 确认 proxy_cache_path 配置中的路径(如 /var/cache/nginx/proxy_cache),并检查该路径所有者和权限:ls -ld /var/cache/nginx/proxy_cache

确保目录具备完整三级权限(owner + parent + cache dir)

缓存写入需满足:Nginx 用户对缓存路径本身、其每一级父目录(直到根)都具备 x(执行)权限(用于进入目录),且对缓存目录本身有 rwx 权限(创建子目录、写入文件)。常见漏点是父目录(如 /var/cache/nginx)权限不足:

aperture: the L402 aware reverse proxy
aperture: the L402 aware reverse proxy

安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。

下载
  • /var 和 /var/cache 一般没问题(系统默认 755)
  • 但 /var/cache/nginx 若为 root 所有且权限为 700,则 www-data 无法进入,导致缓存目录无法初始化
  • 执行:sudo chown -R www-data:www-data /var/cache/nginx/proxy_cache(假设用户为 www-data)
  • 同时设父目录可进入:sudo chmod 755 /var/cache/nginx

验证缓存目录是否可被 Nginx 创建和写入

手动模拟 Nginx 行为测试:

  • 切换到 Nginx 用户:sudo -u www-data bash(或对应用户)
  • 尝试在缓存路径下创建临时文件:touch /var/cache/nginx/proxy_cache/test.tmp
  • 尝试创建子目录:mkdir -p /var/cache/nginx/proxy_cache/testdir
  • 若任一操作报 Permission denied,说明权限链仍有断点

检查 SELinux 或 AppArmor(仅限启用安全模块的系统)

在 CentOS/RHEL(SELinux)或 Ubuntu(AppArmor)上,即使文件权限正确,安全策略也可能拦截写入:

  • CentOS/RHEL:sudo ausearch -m avc -ts recent | grep nginx,查看是否有拒绝日志;临时放行测试:sudo setsebool -P httpd_can_network_connect 1,或为缓存路径打标签:sudo semanage fcontext -a -t httpd_cache_t "/var/cache/nginx(/.*)?",再 restorecon -Rv /var/cache/nginx
  • Ubuntu:sudo aa-status | grep nginx 查看是否启用;检查 /etc/apparmor.d/usr.sbin.nginx 是否包含缓存路径的写入规则,如缺少则添加类似 /var/cache/nginx/** rwk, 并重载:sudo systemctl reload apparmor

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

457

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

940

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

3132

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

1036

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

929

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

474

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2876

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

5372

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

847

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习