詳細なディスカッション: Nginx 502 Bad Gateway エラーの解決策_PHP チュートリアル
max_children=40、各子は平均 20M ~ 30M のメモリを占有します。子の数が増えると、同時に受け入れられる同時実行数も増えます。通常、子の値は、Web サイト上の同時実行数の最大値 + 変動値になります。この値は、必要なメモリ使用量×メモリ使用量になります。
max_requests = N は、各子が N 個のリクエストを受け入れた後、自身を強制終了し、子を再確立することを意味します。
PV / max_children = 各子が受け入れたリクエストの数 [デフォルトでは、ブラウズごとに PHP プログラムを 1 回だけ呼び出します。おそらく非同期的に呼び出されます。インターフェースはどうですか? ]
たとえば、上記の値が 1000 で、10240 を定義すると、fpm が子を強制終了して再構築するのに 10 日以上かかります。メモリ リークがある場合、プロセスは大量のメモリを占有し、実行できなくなります。が解放されると、fpm の処理能力が低下し、不可解なエラーが発生します。
しかし、この値を小さすぎると、fpm は頻繁に子を強制終了して再構築することになり、追加のオーバーヘッドも発生します。
もちろん、最善の最適化は、常にデバッグを行い、Web サイトの運用に基づいてバランス ポイントを見つけることです。
max_children への遅延アプローチもあります php が 5.3 の場合は、fpm のスタイルを apache に似たものに設定できます。このとき、子の数は fpm によって自動的に制御されます。対応する設定パラメータは次のとおりです。
start_servers: 開始プロセスの数
min_spare_servers: プロセスの最小数
max_spare_servers: プロセスの最大数
サーバーが比較的アイドル状態の場合、fpm はリソースを節約するためにいくつかの冗長な子をアクティブに強制終了します。サーバーがビジー状態の場合、サーバーは自動的にさらに子を作成します。
########################
Nginx 502 Bad Gateway は、要求された PHP-CGI が実行されたものの、何らかの理由 (通常はリソースの読み取り)が完了せず、PHP-CGI プロセスが終了します
一般的に、Nginx 502 Bad Gateway は php-fpm.conf の設定に関連しています。
php-fpm.conf には 2 つの重要なパラメータがあります。1 つは max_children で、もう 1 つは request_terminate_timeout ですが、この値は普遍的ではないため、自分で計算する必要があります。
502 問題は、通常、デフォルトの php-cgi プロセスが 5 であるために発生します。phpcgi プロセスが不足していることが原因である可能性があります。/usr/local/php/etc/php-fpm を変更する必要があります。 max_children 値は適切に増加します。
計算方法は次のとおりです:
サーバーのパフォーマンスが十分に高く、ブロードバンド リソースが十分で、PHP スクリプトに無限ループやバグがない場合は、request_terminate_timeout を直接 0s に設定できます。 0 の意味は、PHP-CGI を時間制限なく実行し続けることを意味します。これができない場合、つまり、PHP-CGI にバグがある可能性がある場合、帯域幅が十分でない場合、またはその他の理由で PHP-CGI がフリーズする場合は、次のことを推奨します。 request_terminate_timeout の値。この値はサーバーのパフォーマンスに応じて設定できます。一般に、パフォーマンスが優れているほど、20 分から 30 分の範囲で高く設定できます。
そして、max_children の値はどのように計算されるのでしょうか?原則として、値が大きいほど、php-cgi プロセスが速く処理され、キューに入れられるリクエストが少なくなります。 max_children の設定もサーバーのパフォーマンスに応じて設定する必要があります。通常、サーバー上の各 php-cgi が消費するメモリは約 20M です。
公式の回答に従って、関連する可能性を確認し、ネチズンからの回答と組み合わせて、次の解決策を考え出しました。
1. php fastcgi のプロセス数を確認します (max_children の値)
コード: netstat -anpo | grep "php-cgi" wc -l
5 (5 が表示されている場合)
2.
コード: top
fastcgi プロセスの数を観察します。使用されているプロセスの数が 5 以上の場合は、増やす必要があることを意味します (マシンの実際の状況に応じて)
3. /usr/local/php/etc/php-fpm.conf 関連設定
request_terminate_timeoutの実行時間は60秒、つまり1分です。
##############################################
ウェブサイト動作環境はNginx +php fastcgiモードです。ここ数日動作が不安定で、常にエラーが発生し、502エラーが報告されています。
今日、元同僚にアドバイスを求めたところ、php-fpm ログを確認するように言われました。そこには多くの有益な情報が記録されています。
そこで確認してみると、確かにたくさんのエラー メッセージがあることがわかりました:
Sep 30 08:32:23.289973 [NOTICE] fpm_unix_init_main(), line 271: getrlimit(nofile): max:51200, cur:51200
もしそうならnginx.conf :worker_rlimit_nofile 65500; 不整合をチェックし、サービスを設定して再起動する必要があります
Mar 01 14:39:15.881047 [通知] fpm_children_make()、行 352: child 12364 (プールのデフォルト) が開始されました
Mar 01 14:39: 21.715825 [通知] fpm_got_signal() 、行 48: SIGCHLD を受信しました
Mar 01 14:39:21.715899 [通知] fpm_children_bury()、行 215: 子 11947 (プールのデフォルト) は開始から 175.443305 秒後にコード 0 で終了しました
一部エラー メッセージの説明は簡単です。情報をオンラインで直接確認してください。
検索後、最終的に次の最適化戦略をまとめました:
1. サーバーのファイル ハンドルを増やして開きます
# vi /etc/security/limits.conf plus
* ソフト nofile 65500
* ハード nofile 65500
2. nginx の開いているプロセス ファイルの数を増やします
nginx.conf: worker_rlimit_nofile 65500;
3. php-fpm.conf ファイルを変更する必要があります。主な変更は 2 つあります。
コマンド ulimit -n を使用して、開いているファイルの制限された数を確認します。php-fpm.conf のオプション rlimit_files がこの値と一致していることを確認します。
4,
# vi /etc/sysctl.conf
に
を追加します一番下の fs.file-max=65500
上記の変更後、PHP を再起動します。 /usr/local/webserver/php/sbin/php-fpm restart
ulimit -n が有効かどうかを確認します。そうでない場合はサーバーを再起動するか、/etc/sysctl.conf と /etc/security/limits.conf の設定が有効になります。
今のところ上記のエラーメッセージはまだ出ていません。すべてがうまくいきます。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











すべてのコンテナ(Docker PS)をリストする手順に従って、Dockerコンテナ名を照会できます。コンテナリストをフィルタリングします(GREPコマンドを使用)。コンテナ名(「名前」列にあります)を取得します。

クラウドサーバーでnginxドメイン名を構成する方法:クラウドサーバーのパブリックIPアドレスを指すレコードを作成します。 NGINX構成ファイルに仮想ホストブロックを追加し、リスニングポート、ドメイン名、およびWebサイトルートディレクトリを指定します。 nginxを再起動して変更を適用します。ドメイン名のテスト構成にアクセスします。その他のメモ:SSL証明書をインストールしてHTTPSを有効にし、ファイアウォールがポート80トラフィックを許可し、DNS解像度が有効になることを確認します。

Windowsでnginxを構成する方法は? nginxをインストールし、仮想ホスト構成を作成します。メイン構成ファイルを変更し、仮想ホスト構成を含めます。 nginxを起動またはリロードします。構成をテストし、Webサイトを表示します。 SSLを選択的に有効にし、SSL証明書を構成します。ファイアウォールを選択的に設定して、ポート80および443のトラフィックを許可します。

nginxバージョンを照会できるメソッドは次のとおりです。nginx-vコマンドを使用します。 nginx.confファイルでバージョンディレクティブを表示します。 nginxエラーページを開き、ページタイトルを表示します。

NGINXサーバーを起動するには、異なるオペレーティングシステムに従って異なる手順が必要です。Linux/UNIXシステム:NGINXパッケージをインストールします(たとえば、APT-GetまたはYumを使用)。 SystemCtlを使用して、NGINXサービスを開始します(たとえば、Sudo SystemCtl Start NGinx)。 Windowsシステム:Windowsバイナリファイルをダウンロードしてインストールします。 nginx.exe実行可能ファイルを使用してnginxを開始します(たとえば、nginx.exe -c conf \ nginx.conf)。どのオペレーティングシステムを使用しても、サーバーIPにアクセスできます

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

Dockerでコンテナを作成します。1。画像を引く:Docker Pull [ミラー名]2。コンテナを作成:Docker Run [Options] [Mirror Name] [コマンド]3。コンテナを起動:Docker Start [Container Name]

Docker Containerの起動手順:コンテナ画像を引く:「Docker Pull [Mirror Name]」を実行します。コンテナの作成:「docker create [options] [mirror name] [コマンドとパラメーター]」を使用します。コンテナを起動します:「docker start [container name or id]」を実行します。コンテナのステータスを確認してください:コンテナが「Docker PS」で実行されていることを確認します。
