Gunicorn服务正常但Nginx无法连接Unix套接字权限问题求助
解决Nginx无法连接Unix套接字及50x.html缺失问题
一、Unix套接字权限拒绝的核心原因及修复
你遇到的13: Permission denied错误,根本原因不是套接字本身的权限,而是套接字所在的/root/chatleads-nlu/目录权限限制——默认情况下,/root目录的权限是drwx------,只有root用户能访问,而Nginx的worker进程是以www-data用户运行的,所以即使套接字给了www-data组权限,Nginx也没法进入/root目录读取套接字。
修复步骤:
- 将套接字移到非root专属目录,推荐放在
/var/run/chatleads-nlu/(这是Unix系统存放运行时套接字的标准目录):- 先创建目录并设置正确权限:
sudo mkdir -p /var/run/chatleads-nlu/ sudo chown root:www-data /var/run/chatleads-nlu/ sudo chmod 750 /var/run/chatleads-nlu/ - 修改你的Gunicorn启动命令(或systemd服务文件里的
ExecStart行),让它将套接字生成到这个新目录,比如:gunicorn --workers=3 --bind unix:/var/run/chatleads-nlu/chatleads-nlu.sock wsgi:app
- 先创建目录并设置正确权限:
- 更新Nginx站点配置,把
proxy_pass的路径改成新的套接字路径:proxy_pass http://unix:/var/run/chatleads-nlu/chatleads-nlu.sock; - 重启相关服务使配置生效:
sudo systemctl daemon-reload sudo systemctl restart chatleads-nlu sudo systemctl restart nginx
二、修复/usr/share/nginx/html/50x.html缺失错误
这个错误是因为Nginx找不到默认的50系列错误页面,有两种解决方法:
方法1:创建缺失的50x.html文件
sudo touch /usr/share/nginx/html/50x.html sudo chown www-data:www-data /usr/share/nginx/html/50x.html
你可以编辑这个文件添加自定义错误提示,比如:
<!DOCTYPE html> <html> <head> <title>Server Error</title> </head> <body> <h1>500/502/503/504 Server Error</h1> <p>We're sorry, something went wrong on our end.</p> </body> </html>
方法2:移除Nginx配置中对50x.html的引用(不推荐)
如果不需要默认错误页,可以注释或删除Nginx配置里的以下内容:
# error_page 500 502 503 504 /50x.html; # location = /50x.html { # root /usr/share/nginx/html; # }
额外优化建议
- 不要用root用户运行Gunicorn,建议创建一个专用应用用户(比如
chatleads),在systemd服务文件里添加:
同时确保应用目录的权限对该用户开放,这样更符合安全规范。User=chatleads Group=www-data - 检查
/var/log/nginx/access.log日志,看看是否有其他关联错误,帮助进一步排查问题。
内容的提问来源于stack exchange,提问作者Anurag
相关产品推荐
相关产品推荐

