33

I am using nginx version: nginx/1.0.12

My nginx.conf looks like this:

#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/*;
}

My application seems to be dropping websocket connnections every 75 sec (or so) which I think is because of Nginx's default keepalive config. How do increase the timeout?

approxiblue
  • 6,822
  • 16
  • 49
  • 58
Sameer Segal
  • 21,481
  • 6
  • 41
  • 55

2 Answers2

63

I tried the websocket_*_timeout which are not supported on nginx 1.7.1 (it gives: unknown directive).

However setting a high proxy_*_timeout works:

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

7d means 7 days, see official nginx configuration reference

Additionally you probably only have to set the proxy_read_timeout 7d; as that's the one that usually matter unless the server behind the proxy is very slow.

Wernight
  • 34,346
  • 23
  • 113
  • 131
  • I tried the same, and it's working fine... But in Firebug (add on for Firefox), it's giving errors saying - "NetworkError: 404 Not Found - http://localhost/......" and "Firefox can’t establish a connection to the server at ws://localhost/....." – Akash Chandwani Nov 23 '16 at 08:48
  • The `websocket_*_timeout` requires nginx to be compiled with the `nginx_tcp_proxy_module` module from https://github.com/yaoweibin/nginx_tcp_proxy_module – isapir Mar 21 '17 at 20:44
  • 4
    Not sure you really want to set `proxy_connect_timeout` to such a long period as it's not used as a keepalive config. From the manual: `Defines a timeout for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.` – duckboy81 Dec 29 '19 at 01:00
  • 2
    `proxy_read_timeout 7d;` should be enough. Don't mess `proxy_connect_timeout` config. It is important. – hurelhuyag Jul 02 '21 at 15:55
7

these brillant guys had the same problem and solved it ....

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

also, here in the original repo for that module is more instructions from the module author.

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

it basically amounts to adding websocket_*_timeout instructions in the server directive:

 server {

     ....

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

     ....

         }
Community
  • 1
  • 1
sirvon
  • 2,453
  • 1
  • 30
  • 51