Flask部署至AWS EC2 Ubuntu遇Nginx-Gunicorn 502网关错误求助
解决Flask+Gunicorn+Nginx部署的502 Bad Gateway问题
嘿,我之前把Flask部署到EC2的时候也踩过这个502的坑,结合你描述的情况,咱们从最常见的原因开始排查:
1. 套接字权限配置错误(大概率是核心问题)
你启动Gunicorn时用了-m 007参数,这个八进制权限设置会让project.sock的权限变成所有者无任何权限、组无任何权限、其他用户拥有读写执行权限。但Nginx是用www-data用户/组运行的,它属于组用户,根本没有访问这个套接字的权限,自然会返回502。
修复方案:
- 方法一:启动Gunicorn时设置更合理的权限,比如
-m 0775(所有者和组有读写执行,其他用户有读执行):gunicorn --workers 3 --bind unix:project.sock -m 0775 wsgi:app - 方法二:让Gunicorn直接以
www-data用户身份运行,确保套接字所有者匹配:gunicorn --workers 3 --bind unix:project.sock --user www-data --group www-data -m 0775 wsgi:app
2. Nginx配置里的套接字路径不匹配
检查你的/etc/nginx/sites-available/配置文件,确认proxy_pass里的套接字路径是绝对路径,而不是相对路径。比如你在/home/ubuntu/my-flask-project目录下启动的Gunicorn,那配置里应该写:
location / { include proxy_params; proxy_pass http://unix:/home/ubuntu/my-flask-project/project.sock; }
如果只写project.sock,Nginx会默认去根目录/找这个文件,肯定找不到。
3. 确认Gunicorn进程和套接字文件存在
- 先检查Gunicorn是否在运行:
如果看不到Gunicorn的进程,说明启动失败了,建议把Gunicorn的输出重定向到日志文件排查错误:ps aux | grep gunicorn
然后查看gunicorn --workers 3 --bind unix:project.sock -m 0775 wsgi:app > gunicorn.log 2>&1 &gunicorn.log里的具体报错信息。 - 再检查套接字文件是否存在:
如果文件不存在,说明Gunicorn启动时没有成功创建套接字,同样需要看日志找原因。ls -l /path/to/your/project.sock
4. 重启服务生效
每次修改权限或配置后,一定要重启Nginx和Gunicorn:
# 重启Nginx sudo systemctl restart nginx # 杀掉旧的Gunicorn进程(替换成你的进程PID) sudo kill <gunicorn_pid> # 重新启动Gunicorn gunicorn --workers 3 --bind unix:project.sock -m 0775 wsgi:app
先从这几点入手排查,最常见的就是权限和路径问题,应该能解决你的502错误。
内容的提问来源于stack exchange,提问作者Yu Chen
相关产品推荐
相关产品推荐

