ページが重くなる場合にタイムアウトが発生、その原因が複数の理由のため解決に時間がかかったのでその備忘録。
さきに原因を書くと
- phpの実行時間によるタイムアウト
- ブラウザとnginxのタイムアウト
- nginxとphp-fpmのタイムアウト
まずは最初に表示された
504 Gateway Timeoutを解消する。
phpのタイムアウト時間
max_execution_time
を設定して確認。まだ504エラーが表示されるので、つぎにnginxの
send_timeout
とkeepalive_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_timeout
、fastcgi_read_timeout
、fastcgi_read_timeout
を追加することで解消できた。最終的にnginx.confとphp.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サーバーとアプリケーション・サーバーを分けた場合、その間のタイムアウトも気にしなければいけなかった。