nginxのレスポンスタイムアウト

当サイト、Webサーバはnginxを使用しています。

ゲームのサーバ部分はJavaで作っていますので、ゲームへのパスだけアプリケーションサーバへ転送をしています。

今回のゲームではCometを使用しているので、サーバではクライアントからの接続が保留されている状態です。

この接続がnginxのタイムアウトで切断される、という事態が発生しました。

クライアントに返されるエラーコードは504(Gateway Timeout)です。

スポンサーリンク
レクタングル大1

調べたところ、今回のタイムアウトの設定に関係しそうな設定値は

「proxy_connect_timeout」「proxy_send_timeout」「proxy_read_timeout」あたりでした。

  • proxy_connect_timeout  バックエンドサーバとの接続タイムアウト時間
  • proxy_send_timeout  バックエンドサーバへのデータ送出のタイムアウト時間
  • proxy_read_timeout  バックエンドからのデータ受信のタイムアウト時間

nginxがバックエンドサーバにTCPコネクションを張る時間が「proxy_connect_timeout」、コネクションを張った後、バックエンドサーバにリクエストを送信する時間が「proxy_send_timeout」、バックエンドサーバからのレスポンスを受信する時間が「proxy_read_timeout」ということでしょうか。

今回はアプリケーションサーバからレスポンスが返ってこなくてエラーが発生したので、「proxy_read_timeout」の設定を変更し、無事にタイムアウトが発生しなくなりました。

nginxの「proxy_read_timeout」のデフォルト値は60(秒)です。

本来なら、Webサーバの設定は変えず、アプリケーションの方で60秒以内に再接続する仕組みの方がよさそうなので、アプリケーションを改良したいと思っています。

スポンサーリンク
レクタングル大1
レクタングル大1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする