私は使っている 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接続をドロップしているようです(またはそうです)。タイムアウトを増やすにはどうすればよいですか?
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;
のみを設定する必要があります。これは、プロキシの背後のサーバーが非常に遅い場合を除き、通常問題になるものです。
これらの華麗な男たちは同じ問題を抱えており、それを解決しました....
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 #####;
....
}