socket.io、netty-socketio、nginx 每分钟断开连接

socket.io, netty-socketio, nginx disconnecting every minute

我在端口 9092 上有一个 netty-socketio 服务器 运行。 nginx 被配置为侦听端口 9093 和对 netty-socketio 服务器的代理请求(两者目前 运行 在同一台服务器上,但在生产中将分开)。

如果我直接连接到套接字服务器,一切都会按预期工作,但是当通过 nginx 连接时,连接会断开并每隔一分钟重新连接一次。

极其简化的客户端示例:

<!DOCTYPE html>
<html>
    <head>
        <script src="https://cdn.socket.io/socket.io-1.3.4.js"></script>
        <script>
            var socket = io.connect('http://1.1.1.1:9093');

            socket.on('connect', function ()
            {
                console.log('connected to socket server');
            });

            socket.on('disconnect', function ()
            {
                console.log('lost connection to socket server');
            });
        </script>
    </head>
</html>

nginx 配置:

upstream socketserver {
    server 127.0.0.1:9092;
}

server {
    listen 9093;
    location / {
        proxy_pass http://socketserver;
        proxy_http_version 1.1;
        proxy_pass_header Server;
        proxy_pass_header Connection;
        proxy_pass_header Date;
    }
}

我能找到的唯一区别是 Connection: Upgrade header 在直接连接时设置为大写 "U",在使用 [= 时设置为全小写 ("upgrade") 16=]。我从源代码重新编译了 nginx,但是大写 "U" 并没有什么不同。

如有任何帮助,我们将不胜感激。谢谢。

尝试在上游部分添加一个keepalive

...
keepalive 60;

在试验了默认值为 60s 的指令后,我发现罪魁祸首是 proxy_read_timeout。在 server 上下文中添加这个为我解决了问题:

proxy_read_timeout 86400s;

有关此指令的文档 here