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

Flask-SocketIO在AWS EC2生产环境失效本地正常,连接报404错误求助

问题排查与解决方案

1. 修复Nginx配置语法错误

你的Nginx配置存在块嵌套错误,location /未正确闭合,导致/socket.io路由无法被正确解析。修改后的完整配置如下:

server {
    listen 80;
    server_name 你的EC2公网IP或域名;

    location / {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /socket.io {
        include proxy_params;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_pass http://localhost:8000/socket.io;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

修改后重启Nginx生效:

sudo systemctl restart nginx

2. 切换Flask-SocketIO到生产模式运行

本地调试模式不适用于生产环境,需启用生产级WebSocket服务器(如eventlet)并禁用调试:

首先安装依赖:

pip install eventlet

修改Flask启动代码:

if __name__ == "__main__":
    socketio.run(
        app, 
        debug=False, 
        host='0.0.0.0', 
        port=8000, 
        use_reloader=False, 
        async_mode='eventlet'
    )

建议用systemd等进程管理工具托管Flask服务,避免终端关闭后进程终止。

3. 检查EC2安全组配置

确保EC2安全组开放以下端口:

  • 80端口(Nginx监听端口)
  • 若需直接测试Flask服务,开放8000端口

4. 修正Angular端连接地址

Angular连接时需指向EC2公网IP或域名,而非localhost,示例代码:

import { io } from 'socket.io-client';

const socket = io('http://你的EC2公网IP');

5. 验证Socket.IO服务可用性

在EC2实例内部执行curl命令,测试Flask-SocketIO服务是否正常响应:

curl http://localhost:8000/socket.io/?EIO=4&transport=polling

若返回包含sid、upgrades字段的JSON内容,说明服务正常;若返回404,检查Flask服务是否正确启动。


内容的提问来源于stack exchange,提问作者JAY KANANI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:51:07