NGINX无法连接GUNICORN Socket权限问题求助
解决Debian 12下Flask+Gunicorn+Nginx的502 Bad Gateway权限问题
核心问题定位
从Nginx错误日志的connect() to unix:/home/admin/my_app/app.sock failed(13: Permission denied)可以看出,www-data用户无法访问socket文件所在的目录链。即使socket本身权限设为777,但admin用户的家目录默认权限通常是700,会阻止www-data用户进入该目录。
分步解决
1. 调整admin家目录权限
给www-data组添加进入admin家目录的权限:
chmod g+x /home/admin # 或者更严格的权限设置,仅开放给admin用户和www-data组 chmod 710 /home/admin
2. 确保应用目录权限正确
让www-data组能读取并进入my_app目录:
chmod g+rx /home/admin/my_app
3. 重启服务生效
重启Gunicorn和Nginx服务:
sudo systemctl restart myapp.service sudo systemctl restart nginx
备选方案:将socket移到系统临时目录
如果上述方法仍无效,可以将socket文件放到系统级的临时目录(如/run),避免家目录权限限制:
- 创建socket目录:
sudo mkdir -p /run/my_app sudo chown admin:www-data /run/my_app
- 修改Gunicorn的systemd配置(
/etc/systemd/system/myapp.service):
将ExecStart中的--bind=unix:app.sock改为:
ExecStart=/home/admin/my_app/venv/bin/gunicorn --workers=2 --bind=unix:/run/my_app/app.sock -m 777 main:app
- 修改Nginx配置(sites-available中的对应文件):
将proxy_pass改为:
proxy_pass http://unix:/run/my_app/app.sock;
- 重新加载systemd配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart myapp.service sudo systemctl restart nginx
内容的提问来源于stack exchange,提问作者melev
相关产品推荐
相关产品推荐

