Nginx TCP(WebSockets)超时/保活配置

fd3cxomn  于 2022-10-06  发布在  Nginx
关注(0)|答案(3)|浏览(490)

我正在使用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的默认保持连接配置。如何增加超时时间?

j91ykkif

j91ykkif1#

我尝试了nginx 1.7.1不支持的websocket_*_timeout(它给出了:未知指令)。

但是,设置高proxy_*_timeout的效果如下:

proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;

7d表示7天,参见官方nginx配置参考

此外,您可能只需要设置proxy_read_timeout 7d;,因为这通常很重要,除非代理后面的服务器非常慢。

wmvff8tz

wmvff8tz2#

这些聪明的家伙也有同样的问题,并解决了它。

NGINX to reverse proxy websockets AND enable SSL (wss://)?

此外,在该模块的原始repo中还有来自模块作者的更多说明。

https://github.com/yaoweibin/nginx_tcp_proxy_module/issues/28

这基本上相当于在服务器指令中添加WebSocket_*_Timeout指令:

server {

     ....

     websocket_connect_timeout ######;
     websocket_send_timeout #####;
     websocket_read_timeout #####;

     ....

         }
6tdlim6h

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
定义从代理服务器读取响应的超时时间。超时仅在两个连续的读取操作之间设置,而不是针对整个响应的传输。

如果代理服务器在这段时间内没有传输任何内容,则连接将关闭。

proxy_read_timeout 1d;

相关问题