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

Socket.io连接AWS EC2实例遇连接错误,请求技术帮助

Socket.io 连接AWS EC2实例故障排查方案
  • 检查EC2实例本地防火墙
    除了AWS安全组的入站规则,还要确认EC2实例自身的防火墙(如ufw、iptables)是否开放3000端口。执行以下命令验证:

    sudo ufw status # 适用于Ubuntu/Debian
    sudo iptables -L # 查看iptables规则
    

    如果端口未开放,执行sudo ufw allow 3000(ufw环境)或对应iptables命令开放端口。

  • 修正Socket.io服务绑定地址
    本地开发时服务可能绑定localhost,部署到EC2必须改为0.0.0.0才能接收外部连接。示例Node.js代码:

    const express = require('express');
    const http = require('http');
    const { Server } = require('socket.io');
    
    const app = express();
    const server = http.createServer(app);
    const io = new Server(server, {
      cors: {
        origin: "你的客户端域名或IP", // 生产环境避免使用*
        methods: ["GET", "POST"]
      }
    });
    
    // 绑定0.0.0.0而非localhost
    server.listen(3000, '0.0.0.0', () => {
      console.log('Socket.io服务运行在0.0.0.0:3000');
    });
    
  • 验证客户端连接地址
    客户端必须使用EC2的公网IP或绑定的域名连接,不能用内网IP。示例客户端代码:

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

    可先在本地用以下命令测试端口连通性:

    telnet 你的EC2公网IP 3000
    # 或
    nc -zv 你的EC2公网IP 3000
    

    若连接失败,说明网络链路仍有问题,需重新检查安全组或实例网络配置。

  • 确认CORS配置正确性
    若客户端与服务器跨域,必须在Socket.io服务端配置正确的CORS规则,否则会被浏览器拦截。避免在生产环境使用origin: "*",应指定具体的客户端域名。

  • 排查服务端运行状态
    查看Socket.io服务的控制台日志,确认是否有端口占用、启动失败等报错。执行以下命令检查3000端口占用情况:

    lsof -i :3000 # 查看占用进程
    sudo kill -9 <进程PID> # 杀掉占用进程
    

内容的提问来源于stack exchange,提问作者Daniele Pieretti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:12:17