CentOS下Nginx+Uwsgi+Django架构open() 13权限拒绝错误如何解决?
问题解决方案
你遇到的Nginx报13: Permission denied错误,在已经确认文件系统权限配置正确的前提下,核心原因是CentOS默认开启的SELinux强制访问控制策略限制了Nginx对/var/www/download目录的访问权限,可按以下步骤排查修复:
第一步:验证SELinux是否为问题根源
- 执行命令临时关闭SELinux:
setenforce 0
- 重新测试文件下载功能,如果此时下载正常,即可确认问题由SELinux规则导致,无需关闭SELinux,配置正确的安全规则即可。
第二步:配置SELinux访问规则(推荐,无需关闭SELinux)
- 若系统未安装semanage工具,先执行安装:
- CentOS 7 执行:
yum install -y policycoreutils-python - CentOS 8/9 执行:
yum install -y policycoreutils-python-utils
- 给
/var/www/download目录及其子内容配置Nginx可访问的SELinux上下文:
semanage fcontext -a -t httpd_sys_content_t "/var/www/download(/.*)?"
- 执行命令让规则生效:
restorecon -Rv /var/www/download
- 验证规则配置是否生效:执行
ls -Z /var/www/download,输出结果中如包含httpd_sys_content_t标签即为配置成功。
可选:额外排查项
如果配置完成后仍有报错,可检查以下两项:
- 测试nginx用户对目录的实际访问能力:执行
sudo -u nginx ls /var/www/download/example.txt,如果能正常输出文件名,说明路径权限无问题,否则需检查/var、/var/www等父级目录是否给nginx用户开放了执行(x)权限(目录的x权限是进入目录的必要条件) - 优化Nginx location匹配规则,避免路径拼接错误,可将原
/download-nginx的location配置修改为:
location ^~ /download-nginx/ { internal; alias /var/www/download/; sendfile on; proxy_max_temp_file_size 0; }
修改后重启Nginx生效。
安全优化建议
测试功能正常后,建议取消777这类过高权限,配置更安全的权限规则:
chown -R nginx:nginx /var/www/download chmod -R 755 /var/www/download find /var/www/download -type f -exec chmod 644 {} \;
内容的提问来源于stack exchange,提问作者qwerty
相关产品推荐
相关产品推荐

