Nginx TCP(WebSockets)超时/ Keepalive配置

Sam*_*gal 25 tcp nginx websocket

我在用 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/*;
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序似乎每75秒(或左右)丢弃websocket连接,我认为这是因为Nginx的默认keepalive配置.如何增加超时?

Wer*_*ght 50

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

然而,设置一个高的proxy_*_timeout作品:

proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
Run Code Online (Sandbox Code Playgroud)

7d意味着7天,请参阅官方nginx配置参考

此外proxy_read_timeout 7d;,除非代理服务器后面的服务器非常慢,否则您可能只需设置通常重要的那个.

  • 不确定您是否真的要将“proxy_connect_timeout”设置为这么长的时间,因为它不用作 keepalive 配置。从手册中:`定义与代理服务器建立连接的超时。需要注意的是,这个超时通常不能超过 75 秒。 (3认同)
  • `proxy_read_timeout 7d;` 应该足够了。不要弄乱 `proxy_connect_timeout` 配置。这很重要。 (3认同)

sir*_*von 6

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

NGINX反向代理websockets并启用SSL(wss://)?

另外,这个模块的原始仓库中有来自模块作者的更多指令.

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

它基本上等于在server指令中添加websocket _*_ timeout指令:

 server {

     ....

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

     ....

         }
Run Code Online (Sandbox Code Playgroud)