2012-05-11 5 views
14

Я использую nginx version: nginx/1.0.12Nginx TCP (WebSockets) Тайм-аут/Keepalive Config

Мой 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 connnections каждые 75 сек (или около того) который, я думаю, из-за конфигурации Nginx по умолчанию keepalive. Как увеличить таймаут?

Благодаря

+0

Проверьте [wiki] (http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive). –

+0

Я пробовал это раньше: я добавил keepalive 32 в строку 20 (под сервером 127.0.0.1:9000), и я получаю nginx: [emerg] неизвестная директива «keepalive» в /usr/local/nginx/conf/nginx.conf: 20 –

+0

@DmitryPaskal, если я удаляю директиву вверх (я еще не балансирую нагрузку) и добавляю прокси-проход в теге сервера, то что мне делать? –

ответ

4

эти Brillant ребята имели такую ​​же проблему и решить ее ....

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

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

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

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

server { 

    .... 

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

    .... 

     } 
26

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

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

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

7d означает 7 дней, см official nginx configuration reference

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

+0

Я пробовал то же самое, и он отлично работает ... Но в Firebug (добавление для Firefox), он дает ошибки, говорящие: «NetworkError: 404 Not Found - http: // localhost/...... "и" Firefox не может установить соединение с сервером по адресу ws: // localhost/..... " –

+0

' websocket _ * _ timeout' требует, чтобы nginx был скомпилирован с помощью модуля 'nginx_tcp_proxy_module' от https://github.com/yaoweibin/nginx_tcp_proxy_module – isapir

+0

вы экономите мой день спасибо – onalbi