nginx 504ゲートウェイタイムアウトを解決する方法

Nginxが突然504ゲートウェイタイムアウトエラーを報告します。PHPを使用して大量のデータベースクエリを実行すると、504ゲートウェイタイムアウトエラーが報告されることがあります。504ゲートウェイタイムアウトに遭遇しても恐れる必要はありません。504ゲートウェイタイムアウトが発生するのは、個々の操作のみです。タイムアウトページを更新するか、データベースへの接続を継続するかのいずれかを選択できますが、後者の方が面倒です。Nginxの504ゲートウェイタイムアウト問題を解決する方法を見てみましょう。

504 ゲートウェイタイムアウト

突然のエラー、PHPを使用して大量のクエリ操作を実行すると、504 ゲートウェイタイムアウトエラーが発生することがあります。504 ゲートウェイタイムアウトは個々の操作によってのみ発生するため、504 ゲートウェイタイムアウトを恐れる必要はありません。タイムアウトページを更新するか、データベースへの接続を継続するかのいずれかを選択できますが、後者の方が面倒です。Nginx の 504 ゲートウェイタイムアウト問題を解決する方法を見てみましょう。

通常、次の状況で 504 ゲートウェイ タイムアウトが発生します。

  1. ウェブサイトのプログラムが大量のデータを処理するため、待機時間が長くなり、504 ゲートウェイ タイムアウトが発生します。
  2. Web プログラムで外部リクエストが呼び出されると、外部リクエスト応答のタイムアウトにより 504 ゲートウェイ タイムアウトが発生します。
  3. SQL データベースへの接続に失敗した後、プログラムが時間内に停止されなかったため、無限ループが発生し、504 ゲートウェイ タイムアウトが発生しました。

504 ゲートウェイ タイムアウト問題は、Nginx の構成によって発生します。nginxの設定ファイルを開きます。またはサーバーにログインするためのツール、前者は後者の方法でシステムを変更するには、SSH SFTP を使用してファイルを変更します。

nginxの設定を変更する

/etc/nginx/ を変更する 書類。

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ゲートウェイタイムアウトは一時的に解決されます。最終的には、ウェブサイトのプログラムとデータベースを最適化することで、最終的な解決策となります。

 

スコア

手紙への返信

メールアドレスが変更されることはありません。 支払い欄に必須の項目は必須です