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

Nginx下Socket.IO WebSocket连接30秒超时问题求助

解决Nginx强制断开Socket.IO WebSocket连接的问题

我之前帮不少朋友排查过类似的问题,Nginx默认的超时配置很容易打断长连接,哪怕你一直在传输数据。结合你给出的配置片段,核心问题应该出在stream模块的超时设置或者WebSocket代理的关键头配置缺失上,下面给你一步步的解决方案:

一、针对Stream反向代理的配置调整

从你给出的stream块配置来看,你是用Nginx的TCP层代理来转发请求的,这时候需要在stream的server块里添加两个关键参数:

stream {
    upstream cluster {
        least_conn;
        server xx.xxx.xxx.xx:21xx; # 替换成你的Node服务地址和端口
    }

    server {
        listen 80; # 你实际监听的端口
        proxy_pass cluster;
        
        # 核心设置1:调长代理超时时间,避免30秒被强制断开
        proxy_timeout 300s; 
        # 核心设置2:开启TCP保活,维持长连接的活跃状态
        proxy_socket_keepalive on; 
    }
}
  • proxy_timeout:默认情况下有些环境的这个值可能被设为30秒,直接调长到5分钟(300s)或者更符合你业务需求的时长就行。
  • proxy_socket_keepalive on:开启TCP层面的保活机制,让Nginx和后端Node服务之间的连接不会被中间网络设备或Nginx本身轻易断开。

二、如果是HTTP层代理WebSocket的情况

要是你的Socket.IO是通过HTTP协议升级到WebSocket的(比如用Nginx的http模块代理),那除了超时设置,还必须配置WebSocket的升级头,否则Nginx无法正确识别WebSocket连接:

http {
    # 其他全局配置...
    
    server {
        listen 80;
        server_name your-domain.com; # 替换成你的域名

        location /socket.io {
            proxy_pass http://xx.xxx.xxx.xx:21xx; # 你的Node服务地址
            # 必须配置的WebSocket升级头
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            # 调长超时时间
            proxy_read_timeout 300s;
            proxy_send_timeout 300s;
            # 启用HTTP/1.1,适配WebSocket的长连接特性
            proxy_http_version 1.1;
            # 常规的转发头,可选但建议配置
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

三、配合Socket.IO的客户端/服务端配置优化

另外,建议检查下Socket.IO的ping/pong间隔设置,确保它能在Nginx超时前发送心跳包,重置超时计时器:

// Node.js服务端的Socket.IO配置
const io = require('socket.io')(server, {
  pingInterval: 25000, // 每25秒发送一次ping心跳
  pingTimeout: 60000, // 60秒没收到pong就判定连接断开
});

Socket.IO默认的ping间隔是25秒,比Nginx的30秒超时短,理论上能重置超时,但如果Nginx的超时设置太严格,还是会出问题,所以配合上面的Nginx配置调整就万无一失了。

内容的提问来源于stack exchange,提问作者Ümit Aparı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:03:10