優れたソフトウェアと実用的なチュートリアル
504 ゲートウェイタイムアウト
エングス突然のエラー504 ゲートウェイタイムアウト、PHPを使用してデータベース大量のクエリ操作を実行すると、504 ゲートウェイタイムアウトエラーが発生することがあります。504 ゲートウェイタイムアウトは個々の操作によってのみ発生するため、504 ゲートウェイタイムアウトを恐れる必要はありません。タイムアウトページを更新するか、データベースへの接続を継続するかのいずれかを選択できますが、後者の方が面倒です。Nginx の 504 ゲートウェイタイムアウト問題を解決する方法を見てみましょう。
通常、次の状況で 504 ゲートウェイ タイムアウトが発生します。
- ウェブサイトのプログラムが大量のデータを処理するため、待機時間が長くなり、504 ゲートウェイ タイムアウトが発生します。
- Web プログラムで外部リクエストが呼び出されると、外部リクエスト応答のタイムアウトにより 504 ゲートウェイ タイムアウトが発生します。
- SQL データベースへの接続に失敗した後、プログラムが時間内に停止されなかったため、無限ループが発生し、504 ゲートウェイ タイムアウトが発生しました。
504 ゲートウェイ タイムアウト問題は、Nginx の構成によって発生します。サーバnginxの設定ファイルを開きます。xshellまたはXFTPサーバーにログインするためのツール、前者はリナックス後者の方法でシステムを変更するには、SSH SFTP を使用してファイルを変更します。
nginxの設定を変更する
/etc/nginx/ を変更するnginx.conf 書類。
http {} ブロックにパラメータを追加します。
fastcgi_connect_timeout 6000;
fastcgi_send_timeout 6000;
fastcgi_read_timeout 6000;
これらのパラメータが何をするのか見てみましょう。
fastcgi_connect_timeout
Fastcgi接続タイムアウト、デフォルトは60秒
fastcgi_send_timeout
nginxプロセスがfastcgiプロセスにリクエストを送信するまでのタイムアウト。デフォルト値は60秒です。
fastcgi_read_timeout
fastcgiプロセスがnginxプロセスに出力を送信するまでのタイムアウト。デフォルト値は60秒です。
さらに、nginxには演技タイムアウトパラメータの設定。
プロキシ接続タイムアウト 20000;
プロキシ送信タイムアウト 20000;
プロキシ_読み取りタイムアウト 20000;
プロキシ接続タイムアウト
バックエンド サーバーとの Nginx 接続タイムアウト (プロキシ接続タイムアウト)
プロキシ送信タイムアウト
バックエンドサーバーのデータ転送時間(エージェント送信タイムアウト)
プロキシ読み取りタイムアウト
接続が成功した後、バックエンドサーバーの応答時間(プロキシ受信タイムアウト)
プロキシタイムアウトについてパラメータ設定この部分では、Nginx が外部プロキシ サービスを提供していない場合は、ここでの設定を無視できます。
Nginx を変更した後、nginx -t を使用して次の構成ファイルが正しいかどうかを確認し、nginx サービスを再起動します。
systemctl nginx を再起動する
PHP設定を変更する
1. /etc/php.ini ファイルを変更し、php.ini ファイル内の max_execution_time を秒単位で検索します。
最大実行時間
max_execution_time は、PHPスクリプトの最大実行時間です。デフォルト値は30秒です。300秒に変更することをお勧めします。
2. /etc/php-fpm.d内 で、変更する http://www.conf ファイル。request_terminate_timeout を秒単位で検索します。
リクエスト終了タイムアウト
単一リクエストのタイムアウトを設定します。6000に設定することを推奨します。
3. PHPプログラムに追加することができます set_time_limit(秒) 最大実行時間を設定する
たとえば、set_time_limit(0)はタイムアウトがないことを意味します。
PHP のパラメータを変更した後、PHP サービスを再起動します。
systemctl php-fpm を再起動します。
要約する
上記はnginxの504ゲートウェイタイムアウトを変更する方法です。通常、次のような問題が発生します。ゲートウェイタイムアウト上記の解決策により、タイムアウト期間を延長することで、504ゲートウェイタイムアウトは一時的に解決されます。最終的には、ウェブサイトのプログラムとデータベースを最適化することで、最終的な解決策となります。