nginx+FPMの環境のタイムアウトの解決法の備忘録


前回、記事を書いたPHPをnginx+FPMの環境で、実際にwebアプリを作成。
ページが重くなる場合にタイムアウトが発生、その原因が複数の理由のため解決に時間がかかったのでその備忘録。

さきに原因を書くと
  1. phpの実行時間によるタイムアウト
  2. ブラウザとnginxのタイムアウト
  3. nginxとphp-fpmのタイムアウト
と3つの箇所でタイムアウトが発生していた。

まずは最初に表示された
504 Gateway Timeout
を解消する。
phpのタイムアウト時間max_execution_timeを設定して確認。
まだ504エラーが表示されるので、つぎにnginxのsend_timeoutkeepalive_timeoutを設定。
この設定の追加で504エラーは表示されなくなったが、別のエラーがnginxから表示されるようになった。
An error occurrerd. Sorry, the page you are looking for is currently unavailable. Please try again later.

このエラーメッセージがnginxとphp-fpmのタイムアウトだと気づくのに時間がかかった。
これの対応はnginxの設定にfastcgi_connect_timeoutfastcgi_read_timeoutfastcgi_read_timeoutを追加することで解消できた。

最終的にnginx.confphp.iniに下記の設定を追加しています。
nginx.conf
http {
send_timeout 300; # クライアントへの応答のタイムアウト時間
keepalive_timeout 300; # クライアントとの接続をキープする時間

fastcgi_connect_timeout 300; # nginxとphp-fpmの接続を確立するためのタイムアウト時間
fastcgi_send_timeout 300; # nginxからphp-fpmへのリクエスト送信のタイムアウト時間
fastcgi_read_timeout 300; # php-fpmからの応答のタイムアウト時間
}
php.ini
max_execution_time = 600 # phpのスクリプトの実行時間

webサーバーとアプリケーション・サーバーを分けた場合、その間のタイムアウトも気にしなければいけなかった。
現在の評価: 4

コメント

コメントを投稿
コメントするには TORICO-ID にログインしてください。
ログイン コメント利用規約