Gunicorn、Nginx与Flask部署协作异常,寻求技术协助
Nginx+Gunicorn+Flask部署故障排查方案
核心问题定位
从日志和配置看,存在三个致命错误导致协作失败:Gunicorn套接字绑定语法错误、Nginx协议不匹配、server_name格式错误。
分步修复
1. 修复Gunicorn套接字绑定语法
Gunicorn绑定Unix套接字必须添加unix:前缀,直接写文件名会被解析为网络主机名,导致Name or service not known错误。
- 命令行启动的正确方式:
gunicorn wsgi:application -b unix:project1.sock
- systemd服务配置已正确写了
--bind unix:project1.sock,只需重启服务生效:
sudo systemctl daemon-reload sudo systemctl restart gunicorn
2. 修正Nginx协议与配置
Gunicorn是WSGI服务器,默认使用HTTP协议,Nginx配置中误用了uWSGI协议相关指令,导致无法通信。同时server_name的逗号分隔是错误格式,需改为空格分隔。
修改/etc/nginx/sites-enabled/project1.conf为:
include /etc/nginx/conf.d/*.conf; upstream app_a { server unix:///home/bit-web/pyvenv/project1/project1.sock; } server { listen 80; server_name guadalupe.int.colorado.edu 172.20.13.55; location / { proxy_read_timeout 300; proxy_connect_timeout 300; proxy_pass http://app_a; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
验证配置并重启Nginx:
sudo nginx -t sudo systemctl restart nginx
3. 确保套接字权限正确
旧的套接字文件可能权限异常,先删除再让Gunicorn重新创建:
sudo rm /home/bit-web/pyvenv/project1/project1.sock sudo systemctl restart gunicorn
检查权限,确保nginx组有读写权限:
ls -l /home/bit-web/pyvenv/project1/project1.sock
(预期输出权限为rwxrwx---,归属用户bit-web、组nginx)
4. 验证服务状态
- 检查Gunicorn运行状态:
sudo systemctl status gunicorn
- 检查Nginx运行状态:
sudo systemctl status nginx
内容的提问来源于stack exchange,提问作者Alex Noel
相关产品推荐
相关产品推荐

