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。
我在端口 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。