You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx报(13: Permission denied)连接upstream错误,Django部署后访问白屏

问题根因

报错(13: Permission denied) while connecting to upstream是Nginx进程没有权限访问Gunicorn生成的Unix套接字文件导致的,你当前把sock文件放在了/root目录下,该目录默认仅root用户可访问,而Nginx默认以www-data普通用户运行,自然无法读取目录下的sock文件。

排查步骤

  • 确认Nginx运行用户:执行命令 ps aux | grep nginx,查看第一列的运行用户,默认应为www-data
  • 检查sock文件所在目录权限:执行命令 ls -ld /root/myproject/,确认www-data是否有读和执行权限
  • 检查sock文件本身权限:执行命令 ls -l /root/myproject/myproject.sock,确认文件权限是否允许非root用户访问
  • 检查AppArmor状态(Ubuntu默认开启),确认是否有安全策略阻止Nginx访问sock路径

解决方案

方案1:移动sock文件到公共可访问目录(推荐,安全性最高)

不要把sock文件放在/root目录下,移动到/run或者/var/www这类公共目录:

  1. 修改Gunicorn的systemd配置文件(一般路径为/etc/systemd/system/gunicorn.service),把sock文件的生成路径改到/run下,例如把--bind unix:/root/myproject/myproject.sock改成--bind unix:/run/myproject.sock
  2. 重载systemd配置:sudo systemctl daemon-reload
  3. 重启Gunicorn服务:sudo systemctl restart gunicorn
  4. 修改Nginx配置文件里的上游地址,把sock路径同步为新路径,例如proxy_pass http://unix:/run/myproject.sock;
  5. 测试Nginx配置是否合法:sudo nginx -t
  6. 重启Nginx服务生效:sudo systemctl restart nginx

方案2:调整目录和sock文件权限(不推荐,存在安全风险)

如果必须把sock放在/root目录下,可临时调整权限解决:

  1. 给/root目录加执行权限,允许其他用户进入目录:sudo chmod o+x /root
  2. 给项目目录加读和执行权限:sudo chmod o+rx /root/myproject
  3. 把www-data加入sock文件所属的用户组:sudo usermod -aG root www-data
  4. 重启Nginx服务生效:sudo systemctl restart nginx

内容的提问来源于stack exchange,提问作者Osama Radwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:36:04