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

EC2(Amazon-Linux-2)部署Flask应用:Gunicorn服务运行但POST请求失败

问题排查与解决

1. NGINX代理目标不匹配(核心问题)

手动执行gunicorn --bind 127.0.0.1:5000 wsgi:app时,Gunicorn绑定的是TCP端口5000,NGINX配置里的proxy_pass http://127.0.0.1:5000刚好匹配,请求能正常转发。但通过systemd服务启动时,Gunicorn绑定的是Unix套接字文件myproject.sock,NGINX仍在尝试转发到TCP端口5000,自然无法连通。

修改NGINX配置文件/etc/nginx/sites-enabled/reverse-proxy.conf中的location /块,将proxy_pass指向套接字文件:

location / {
    error_page 405 =200 $uri;
    proxy_pass http://unix:/home/ec2-user/myproject/myproject.sock;
}

修改后重启NGINX服务:

sudo systemctl restart nginx

2. 检查WSGI模块导入路径

你的wsgi.py中使用from myproject import app,但提供的Flask应用文件名为flaskapp.py,这会导致Gunicorn启动时找不到myproject模块(除非你将flaskapp.py重命名为myproject.py,或在项目目录下创建__init__.py并导入flaskapp中的app)。

如果未重命名文件,需修改wsgi.py为:

from flaskapp import app

if __name__ == "__main__":
    app.run(host='127.0.0.1')

3. 验证套接字文件权限

虽然你提到权限配置正确,但仍需确认myproject.sock的权限允许NGINX进程访问:

  • 查看套接字权限:
ls -l /home/ec2-user/myproject/myproject.sock
  • 你的Gunicorn启动参数中-m 007设置的权限是---rwxrwx(用户和组无权限,其他用户全权限),更安全的做法是设置为0770,并将ec2-user加入NGINX用户组(Amazon Linux 2中NGINX用户组为nginx):
sudo usermod -aG nginx ec2-user

然后修改myproject.service中的ExecStart参数,将-m 007改为-m 0770,重启服务:

sudo systemctl daemon-reload
sudo systemctl restart myproject

4. 排查日志定位问题

如果以上修改后仍无法解决,查看以下日志获取更多信息:

  • NGINX错误日志:
cat /var/log/nginx/reverse-error.log
  • Gunicorn服务日志:
journalctl -u myproject.service

内容的提问来源于stack exchange,提问作者Mahesh Manjunath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:35:22