Nginx反向代理WebSocket超时

问题描述 投票:0回答:1

我正在使用java-websocket来满足我的websocket需求,在wowza应用程序中使用,并使用nginx作为ssl,将请求代理到java。

问题是连接似乎在服务器端1小时后被切断。客户端甚至都不知道它已经断开很长一段时间了。我不想只调整nginx的超时,我想了解为什么连接被终止,因为套接字正常运行,直到它没有。

编辑:忘记发布配置:

location /websocket/ {
    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    include conf.d/proxy_websocket;
    proxy_connect_timeout 1d;
    proxy_send_timeout 1d;
    proxy_read_timeout 1d;
}

这包括配置:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass                      http://127.0.0.1:1938/;
  • Nginx的/ 1.12.2
  • CentOS Linux版本7.5.1804(核心版)
  • Java WebSocket 1.3.8(GitHub
nginx websocket nginx-reverse-proxy
1个回答
0
投票

很可能是因为你的websocket代理的配置需要调整一点,但是因为你问:

逆向代理服务器在支持WebSocket时面临一些挑战。一个是WebSocket是逐跳协议,因此当代理服务器拦截来自客户端的升级请求时,它需要将自己的升级请求发送到后端服务器,包括适当的头。此外,由于WebSocket连接是长期存在的,与HTTP使用的典型短期连接相反,反向代理需要允许这些连接保持打开,而不是关闭它们,因为它们似乎是空闲的。

在处理你的websocket代理的location指令中你需要包含头文件,这是Nginx给出的示例:

location /wsapp/ {
    proxy_pass http://wsbackend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}

现在这应该工作,因为:

NGINX支持WebSocket,允许在客户端和后端服务器之间建立隧道。要使NGINX将升级请求从客户端发送到后端服务器,必须明确设置升级和连接标头,如本示例所示

我还建议您查看Nginx Nchan module,它将websocket功能直接添加到Nginx中。效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.