web-dev-qa-db-ja.com

Nginx TCP(WebSockets)タイムアウト/キープアライブ設定

私は使っている 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/*;
}

私のアプリケーションは、75秒ごとにWebSocket接続をドロップしているようです(またはそうです)。タイムアウトを増やすにはどうすればよいですか?

23
Sameer Segal

Nginx 1.7.1でサポートされていないwebsocket_*_timeoutを試しました(unknown directive)。

ただし、高いproxy_*_timeoutを設定しても機能します。

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

7dは7日間を意味します。 公式のnginx設定リファレンス を参照してください

さらに、proxy_read_timeout 7d;のみを設定する必要があります。これは、プロキシの背後のサーバーが非常に遅い場合を除き、通常問題になるものです。

48
Wernight

これらの華麗な男たちは同じ問題を抱えており、それを解決しました....

NGINXはWebsocketをリバースプロキシし、SSLを有効にします(wss://)?

また、このモジュールの元のリポジトリには、モジュール作成者からのより多くの指示があります。

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

基本的に、サーバーディレクティブにwebsocket _ * _ timeout命令を追加することになります。

 server {

     ....

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

     ....

         }
5
sirvon