メモリが大きいと、次のパラメータを増やすことができ、502 エラーを効果的に減らすことができます
php-fpm変更する主なパラメータ
nginx主な変更パラメータfastcgi_connect_timeout 1800;
fastcgi_send_timeout 1800;
fastcgi_read_timeout 1800;
fastcgi_buffer_size 1024k;
fastcgi_buffers 2 1024k;
fastcgi_busy_buffers_size 2048k;
fastcgi_temp_file_write_size 2048k;
注: 2 つの 1024k 値等しい必要があります。そうでない場合は、エラーが報告されます
以下はデフォルトのパラメータです
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k ;
----- -------------------------------------- ---------- -------------------------------------- --
[記事の著者: Wei Shaoqian、転載する場合は元のリンクを示してください: http://mven.cn/nginx-502-504/ ]
1. エラー メッセージの説明:
Nginx 502 Bad Gateway は、要求された PHP-CGI が実行されたことを意味しますが、何らかの理由 (通常はリソースの読み取りの問題) により完了せず、PHP-CGI プロセスが終了しました。
Nginx 504 Gateway Timeout は、要求されたゲートウェイが要求されていないことを意味します。簡単に言えば、実行可能な PHP-CGI が要求されていないことを意味します。
2. エラー メッセージの原因の分析:
これら 2 つの問題を解決するには、実際には包括的な思考が必要です。一般的に、Nginx 502 Bad Gateway は php-fpm.conf、
の設定に関連しています。そして、Nginx 504 ゲートウェイのタイムアウトは、nginx.conf の設定に関連しています。
php-fpm.conf には 2 つの重要なパラメータがあります。1 つは「max_children」、もう 1 つは「request_terminate_timeout」ですが、この値は普遍的ではないため、自分で計算する必要があります。
計算方法は次のとおりです:
サーバーのパフォーマンスが十分でブロードバンドリソースが十分で、PHPスクリプトにループやバグがない場合は、「request_terminate_timeout」を直接次のように設定できます。 0秒。 0 の意味は、PHP-CGI を時間制限なく実行し続けることを意味します。これができない場合、つまり、PHP-CGI にバグがあるか、帯域幅が不十分であるか、またはその他の理由で PHP-CGI が一時停止されている可能性がある場合は、次のことをお勧めします。 assign "request_terminate_timeout" サーバーのパフォーマンスに基づいて設定できる値。一般に、パフォーマンスが優れているほど、20 分から 30 分の範囲で高く設定できます。サーバーの PHP スクリプトは長時間実行する必要があるため、10 分以上かかる場合もあるので、PHP-CGI が停止して 502 が表示されないように 900 秒に設定しました。 不正なゲートウェイ エラー。
そして、「max_children」の値はどのように計算されるのでしょうか?原則として、値が大きいほど、php-cgi プロセスが速く処理され、キューに入れられるリクエストが少なくなります。 「max_children」の設定もサーバーのパフォーマンスに応じて設定する必要があります。一般的に、サーバー上の各 php-cgi が消費するメモリは通常の状況で約 20M であるため、「max_children」を 40, 20M* に設定します。 40=800M は、ピーク時にすべての PHP-CGI によって消費されるメモリが 800M 以内であることを意味します。これは、私の有効メモリより 1Gb 少ないです。また、「max_children」が 5 ~ 10 などの小さい値に設定されている場合、php-cgi は「非常に疲れ」、処理速度が非常に遅くなり、待ち時間が長くなります。リクエストが長期間処理されなかった場合、504 が表示されます。 ゲートウェイ タイムアウト エラー、および 502 Bad Gateway エラーは、非常に疲れて処理されている php-cgi で問題が発生した場合に表示されます。
3. 一時的な解決策:
要約すると、Nginx プロンプト 502 および 504 エラーの一時的な解決策は次のとおりです:
1. php-fpm.conf の関連設定を調整します:
2. nginx.conf の関連設定を調整します:
fastcgi_connect_timeout 600;fastcgi _send_ タイムアウト 600;
fastcgi_read_timeout 600;
fastcgi_buffer_size 256k;
fastcgi_buffers 16 256k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 512k;
4 番目の究極の解決策:
タイトル 3 に示されている解決策は問題を一時的に解決するだけですが、 Web サイトへのアクセス数は確かに非常に多く、Nginx + FastCGI は瞬間的または短期間に高い同時実行性を処理する場合にのみ良い影響を与えることができるため、現時点での唯一の究極的な解決策は、php-cgi を定期的に再起動することです。スムーズに。
具体的な構成は次のとおりです:
1. 非常に簡単なスクリプトを作成します:
#vi /home/www/scripts/php-fpm.sh
内容は次のとおりです。 :
#!/bin/bash# このスクリプトは */1
/usr/local/php/sbin/php-fpm reload で実行されます
2 スクリプトをスケジュールされたタスクに追加します。
#crontab -e
内容は以下の通りです:
*/1 * * * * /home/www/scripts/php-fpm.sh
注:手間を省くため、スクリプトを記述する必要はありません。php-fpm のスムーズ再起動コマンドを crontab に直接記述します。
元の記事、転載する場合はその旨を明記してください: 魏少謙 [趙炳亮] – サーバー システム アーキテクチャから転載上記では、Nginx で 502 エラーと 504 エラーが発生する場合の究極の解決策を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。