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

生产环境Socket.io连接404问题求助(Express+React部署VPS)

Socket.io 部署后404问题解决指南

1. 先搞定Nginx配置(大概率是这里的问题)

Socket.io的请求需要特殊的反向代理规则,普通的HTTP路由转发不会处理它的长轮询和WebSocket协议。在你的Nginx server配置块里添加这段:

location /socket.io/ {
    proxy_pass http://localhost:你的Node服务端口; # 改成你实际用的端口,比如3000
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

添加完重启Nginx:sudo systemctl restart nginx

如果你的Socket.io用了自定义路径(比如不是默认的/socket.io),记得把location路径和服务端、客户端的配置统一。

2. 确认服务端Socket.io绑定正确

别把Socket.io直接挂到Express app上,必须绑定到Express用的HTTP服务器实例:

const express = require('express');
const app = express();
const httpServer = require('http').createServer(app);
const io = require('socket.io')(httpServer); // 绑定到httpServer,不是app

// 启动时要监听httpServer,不是app.listen
httpServer.listen(3000, () => {
  console.log('服务跑在3000端口');
});

要是你设置了path选项(比如io(httpServer, { path: '/my-socket' })),客户端也要对应加上path: '/my-socket'。

3. 修正客户端连接配置

客户端直接连服务器的IP/域名就行,让Nginx帮你转发到Node服务,别直接连Node端口:

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

const socket = io('http://server-ip', {
  transports: ['websocket', 'polling'], // 优先用WebSocket,不行再降级长轮询
  path: '/socket.io/' // 服务端改了路径的话,这里同步改
});

4. 检查防火墙和服务状态

  • 确认80/443端口是开放的(HTTP路由正常的话这步应该没问题,但还是确认下)
  • 如果要直接连Node端口,得先开放端口:sudo ufw allow 3000/tcp
  • 用pm2 list看Node服务是不是在跑,pm2 logs看有没有报错日志

5. 测试服务端Socket.io是否正常

在服务器上用curl测一下:

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

要是返回带sid、upgrades这些字段的内容,说明服务端没问题;还是404的话,就是服务端初始化错了。


内容的提问来源于stack exchange,提问作者Md Shayon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:05:27