我正在使用nginx version: nginx/1.0.12
我的nginx.conf如下所示:
# user nobody;
worker_processes 1;
error_log logs/error.log;
# error_log logs/error.log notice;
# error_log logs/error.log info;
# pid logs/nginx.pid;
events {
worker_connections 1024;
}
tcp {
upstream websockets {
## Play! WS location
server 127.0.0.1:9000;
check interval=3000 rise=2 fall=5 timeout=1000;
}
server {
listen 80;
listen 8000;
server_name socket.domain.com;
tcp_nodelay on;
proxy_pass websockets;
proxy_send_timeout 300;
}
# virtual hosting
#include /usr/local/nginx/vhosts/*;
}
我的应用程序似乎每隔75秒(大约)就会丢弃一次WebSocket连接,我认为这是因为Nginx的默认保持连接配置。如何增加超时时间?
3条答案
按热度按时间j91ykkif1#
我尝试了nginx 1.7.1不支持的
websocket_*_timeout
(它给出了:未知指令)。但是,设置高
proxy_*_timeout
的效果如下:7d
表示7天,参见官方nginx配置参考此外,您可能只需要设置
proxy_read_timeout 7d;
,因为这通常很重要,除非代理后面的服务器非常慢。wmvff8tz2#
这些聪明的家伙也有同样的问题,并解决了它。
NGINX to reverse proxy websockets AND enable SSL (wss://)?
此外,在该模块的原始repo中还有来自模块作者的更多说明。
https://github.com/yaoweibin/nginx_tcp_proxy_module/issues/28
这基本上相当于在服务器指令中添加WebSocket_*_Timeout指令:
6tdlim6h3#
其他人的答案是可行的。
只需在此处发布官方的WebSocket代理笔记,
这有助于我们更准确地了解原因和方式。
http://nginx.org/en/docs/http/websocket.html
默认情况下,如果代理服务器未在
60 seconds
内传输任何数据,则连接将关闭。可以使用proxy_read_timeout
指令增加此超时。或者,可以将代理服务器配置为定期发送WebSocket ping帧以重置超时并检查连接是否仍处于活动状态。
Http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout
定义从代理服务器读取响应的超时时间。超时仅在两个连续的读取操作之间设置,而不是针对整个响应的传输。
如果代理服务器在这段时间内没有传输任何内容,则连接将关闭。