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
相关产品推荐
相关产品推荐

