2012-05-11 39 views
14

Używam nginx version: nginx/1.0.12Nginx TCP (WebSockets) Timeout/Keepalive Config

Moja nginx.conf wygląda następująco:

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

Moja aplikacja wydaje się być upuszczenie Połączeń websocket każde 75 sekund (lub więcej) co moim zdaniem jest spowodowane domyślną konfiguracją keepgin. Jak zwiększyć czas oczekiwania?

Dzięki

+0

Sprawdź [wiki] (http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive). –

+0

Próbowałem już wcześniej: dodałem keepalive 32 na linii 20 (pod serwerem 127.0.0.1: 9000) i otrzymuję nginx: [emerg] nieznana dyrektywa "keepalive" w /usr/local/nginx/conf/nginx.conf: 20 –

+0

@DmitryPaskal, jeśli usunę dyrektywę upstream (jeszcze nie równoważę obciążenia) i dodaję przepustkę proxy w znaczniku serwera, co powinienem zrobić? –

Odpowiedz

4

te brillant faceci miał ten sam problem i rozwiązać go ....

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

również tutaj, w oryginalnym repo dla tego modułu jest dalsze instrukcje od autora modułu.

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

to w zasadzie wynosi dodanie websocket _ * _ instrukcje limitu czasu w dyrektywie serwera:

server { 

    .... 

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

    .... 

     } 
26

Próbowałem websocket_*_timeout, które nie są obsługiwane na nginx 1.7.1 (to daje: nieznaną dyrektywę).

Jednak ustanowienia wysokich proxy_*_timeout utwory:

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

7d oznacza 7 dni, zobaczyć official nginx configuration reference

Dodatkowo prawdopodobnie masz tylko ustawić proxy_read_timeout 7d; jak to jest taki, który zwykle kwestia chyba serwerze tył proxy działa bardzo wolno.

+0

Próbowałem tego samego, i działa dobrze ... Ale w Firebug (dodać do Firefoksa), to daje błędy mówiąc: "NetworkError: 404 Not Found - http: // localhost/...... "i" Firefox nie może ustanowić połączenia z serwerem pod adresem ws: // localhost/..... " –

+0

' 'timeout websocket _ * _ timeout' wymaga kompilacji nginx z modułem' nginx_tcp_proxy_module' od https://github.com/yaoweibin/nginx_tcp_proxy_module – isapir

+0

oszczędzasz mój dzień dzięki – onalbi