Nginx TCP (WebSockets) Тайм-аут/Keepalive Config

Я использую 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/*;
}

Мое приложение, похоже, отключает соединения websocket каждые 75 секунд (или около того), которые, как мне кажется, обусловлены конфигурацией по умолчанию для nginx. Как увеличить таймаут?

Спасибо

Ответы

Ответ 1

Я попробовал websocket_*_timeout, которые не поддерживаются в nginx 1.7.1 (он дает: неизвестную директиву).

Однако установка высоких proxy_*_timeout работает:

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

7d означает 7 дней, см. официальную ссылку на конфигурацию nginx

Кроме того, вы, вероятно, должны установить только proxy_read_timeout 7d; как тот, который обычно имеет значение, если сервер за прокси-сервером очень медленный.

Ответ 2

у этих блестящих парней была такая же проблема и она была решена...

NGINX для изменения прокси-серверов и включения SSL (wss://)?

также здесь, в исходном репо для этого модуля больше инструкций от автора модуля.

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

это в основном сводится к добавлению инструкций websocket _ * _ timeout в директиве сервера:

 server {

     ....

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

     ....

         }