検索
ホームページ運用・保守Nginxnginx+php-fpm サービスの HTTP ステータス コード 502 を解決する方法

当社の Web プロジェクトの 1 つでは、新しい都市の増加により、アクセス数が増加し、データベースへの負荷が増大しました。インターフェースを提供するビジネス パーティとして、多数の「502」リクエストが発生しました。最近、下流のフィードバックによって報告されました。

502、不正なゲートウェイは通常、アップストリーム (ここでは PHP) でのエラーです。PHP の場合、502 の一般的な原因は、スクリプトの実行がタイムアウト設定時間を超えているか、タイムアウト設定が大きすぎることです。 PHP プロセスに時間がかかるため、解放できず、ゲストをピックアップするためのアイドル状態のワーカー プロセスがありません。

私たちのプロジェクトは、PHP の実行時間の設定が短すぎることが原因です。この場合、まず PHP の実行時間を適切に増やし、最初に 502 を確実にクリアすることができます。結局、最適化にはさらに時間がかかります。

php の実行時間を制御するには、php.ini の max_execution_time と php-fpm の request_terminate_timeout の 2 つのオプションがあります。request_terminate_timeout は max_execution_time をオーバーライドできるため、グローバル php.ini を変更したくない場合は、単に変更してくださいphp-fpmの設定だけで十分です。

次に、php スクリプトの実行が設定時間を超えて nginx が 502 を返す原因を詳しく分析します。

最初にシーンを設定して、問題が再発しましょう。

nginx と php は、追跡を容易にするために、それぞれ 1 つのワーカーのみを起動します。

php-fpm の request_terminate_timeout は 3 秒に設定されています。

テスト スクリプト test.php

sleep(20);
echo 'ok';

go go go:

ブラウザで www.v.com/test.php にアクセスすると、3 秒後に予想通り 404 が表示されます。秒。 ? ?何? ? ?

nginx+php-fpm サービスの HTTP ステータス コード 502 を解決する方法

これは悪いスタートです。すぐに nginx 設定ファイルを見てください。

nginx+php-fpm サービスの HTTP ステータス コード 502 を解決する方法

この場所の設定は、 5xx エラーが発生します。見栄えの良いインターフェイスにジャンプしますが、/usr/share/nginx/html に 50x.html ファイルがありません。それで私は404を手に入れました。これは問題に対する私の判断の正確さに影響を与えないでしょうか?コメントアウトするだけです!もう一度アクセスして 3 秒待つと、最終的に「通常の」インターフェイスが表示されます。

nginx+php-fpm サービスの HTTP ステータス コード 502 を解決する方法

環境は良好です。以下のルーチンに従ってください。Web の問題のトラブルシューティング ルーチンに従ってください。まずエラー ログを見てみましょう:

nginx:

nginx+php-fpm サービスの HTTP ステータス コード 502 を解決する方法

報告されるエラーは、recv() が失敗しました (104: ピアによって接続がリセットされました。

recv が失敗し、接続がリセットされました。接続をリセットしますか? 設定しますか? 一貫性がありませんか?

php-fpm のエラー ログを調べています:

(php-fpm の php_admin_value[error_log] オプションは、 php のエラー ログ, php.ini に上書きされます. ただし、ここでは php エラーではなく、php-fpm エラーを見ています. php-fpm のエラー ログは、php-fpm の error_log オプションで指定されます。 conf.)

nginx+php-fpm サービスの HTTP ステータス コード 502 を解決する方法

各リクエストは 2 つの警告と 1 つの通知を生成します:

warning: スクリプトの実行がタイムアウトして終了しました。

warning : 子プロセスが sigterm を受信しました シグナルが終了しました

Notice: 新しい子プロセスが開始されました (pm.min_spare_servers = 1 に設定したため)

php 回のワーカー プロセスが実行されたようです出力すると、スクリプトの実行が終了するだけでなく、ワーカープロセスも終了します。phpワーカープロセスが終了するため、nginxエラー接続がリセットされるようです(tcp接続では、一方が切断されると、最初に送信されます)

ログを通じて、php スクリプトの実行がタイムアウトになり、ワーカーのサブプロセスが終了し、nginx がピアによる接続リセットのエラーを報告することがすでにわかります。 php と nginx の状況を参照してください:

php:

nginx+php-fpm サービスの HTTP ステータス コード 502 を解決する方法

1.nginx 接続リクエストを受け入れます (ソケット、バインド、リッスンはすべてnginx のポートは 47039 で、標準入力の fd0 からデータを読み込んでいることがわかります。これは fast-cgi プロトコルで規定されており、accept 後の接続記述子は 3 です。

2. fd3 から nginx によって渡されたデータを fastcgi プロトコル形式で読み取り、856 バイトを受信しました。なぜ read5 なのか、時間はどうでしょうか?

fastcgi プロトコルのデータ パケットは 8 バイトでアライメントされており、パケット ヘッダーとパケット本体で構成されているためです。そして、最初にリクエスト ID、バージョン、タイプ、その他の情報を含むリクエスト パケットを送信し (ヘッダーとボディはそれぞれ 8 バイトを占有します)、次に取得パラメータと環境変数を渡すために params パケットを送信します (ヘッダーは 8 バイトです)。バイト)、パケットボディが長くなります)、最後にパケットボディのないパケットヘッダーのみのparamsデータパケットが送信され、パラメーターの送信の終了を示します(パケットヘッダーの8バイト)。したがって、最初の 3 回の読み取りは、リクエスト パケットのヘッダーと本文、およびパラメータ パケットのヘッダーを読み取るために使用されます。4 回目の読み取りは実際のデータを読み取り、最後の読み取りは最後のデータのヘッダーを読み取ります。パラメータパケット。したがって、nginx によって送信されるデータは 8 8 8 856 8 = 896 バイトになります (これは、以下の nginx の送信バイトに対応します)。 post モードの場合は、stdin データ パケットも送信されることに注意してください。

3. PHP プログラムの sleep(20) で 20 秒間のスリープを設定します。その後はプロセスが終了するため、それ以上はありません。 strace プログラムも終了しました。

nginx:

nginx+php-fpm サービスの HTTP ステータス コード 502 を解決する方法

#1.ブラウザへのリクエストを受け入れます。ブラウザ側のポートが 56434、IP が 192.168.1.105 であることがわかります。となり、確立されました 接続されているfdは3です。

2. fd3、http プロトコルからデータを受信します。

3. ソケット fd21 を作成して、php との接続を確立します。

4. fd21 に接続すると、ローカル マシンの 9000 番ポートに接続されていることがわかります。ここでは、nginx と php-fpm は IP ソケット接続方式を使用しています。nginx と php-fpm が 1 つのマシンにデプロイされている場合、unix が考えられます。ドメインソケット。

5. fast-cgi プロトコル形式でデータを fd21 に書き込みます。書き込まれた長さが 896 であることがわかります。これは、上記の PHP が受信した長さに対応します。

6.recvfrom 関数は fd21 から echonreset (ピアによる接続リセット)を返します

7.エラー情報を fd9 に書き込みます.fd9 が nginx エラー ログのファイル記述子であると推測できます。

8. fd21 との接続を閉じます。

9. 502 不良ゲートウェイを fd3 に書き込み、これがブラウザに返される情報です。

10. fd8 にアクセス ログを書き込みます。fd8 は nginx のアクセス ログのファイル記述子であると推測できます。

nginxのアクセスログとエラーログの推論を検証してみましょう。確かに fd8、fd9 であり、書き込みモードであることがわかります。

nginx+php-fpm サービスの HTTP ステータス コード 502 を解決する方法

次に、このプロセス中のネットワーク パケット全体の送信を見てみましょう。

tcpdump を介してパケットをキャプチャすると、より便利です。アーティファクトを使用して表示します。

私は nginx と php の間の通信だけを確認したいのですが、nginx のポートが 47039 であることがわかっているので、tcp.srcport==47039 を通じて対応するパッケージを除外できます。

nginx+php-fpm サービスの HTTP ステータス コード 502 を解決する方法

nginx と php-fpm の間のデータ対話のプロセスを確認できます。47039->9000 が 3 ウェイ ハンドシェイクを確立し、データを 9000、9000 の応答に送信します。 ack 付き、3 秒後に 9000 最初に返信。何も間違っていません。

注:

syn、fin はそれぞれシーケンス番号を占有します

ack、rst はシーケンス番号を占有しません (2 つのパッケージ 28 と 29 の reqnum と acknum は同じ)

シーケンス番号はバイトごとに 1 を加えます (896 バイトが 29 パケットで送信されますが、29 パケットのシーケンスは 4219146879 で、30 パケットの ACK は 4219147775 であり、これはまったく違います) of 896)

最初 返信は不要です。

以上がnginx+php-fpm サービスの HTTP ステータス コード 502 を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Nginxユニット:主要な機能と機能Nginxユニット:主要な機能と機能Apr 25, 2025 am 12:17 AM

Nginxunitは、複数のプログラミング言語をサポートし、動的構成、ゼロダウンタイム更新、組み込みのロードバランシングなどの機能を提供するオープンソースアプリケーションサーバーです。 1。動的構成:再起動せずに構成を変更できます。 2。多言語サポート:Python、Go、Java、PHPなどと互換性があります。 4。ビルトインロードバランシング:リクエストは、複数のアプリケーションインスタンスに配布できます。

Nginxユニットvs他のアプリケーションサーバーNginxユニットvs他のアプリケーションサーバーApr 24, 2025 am 12:14 AM

nginxunitは、多言語プロジェクトや動的な構成要件に適した、apachetomcat、gunicorn、node.jsビルトインHTTPサーバーよりも優れています。 1)複数のプログラミング言語をサポートします。2)動的な構成リロード、3)高いスケーラビリティと信頼性を必要とするプロジェクトに適した組み込みの負荷分散機能を提供します。

Nginxユニット:アーキテクチャとその仕組みNginxユニット:アーキテクチャとその仕組みApr 23, 2025 am 12:18 AM

Nginxunitは、モジュラーアーキテクチャと動的な再構成機能により、アプリケーションのパフォーマンスと管理性を向上させます。 1)モジュラー設計には、マスタープロセス、ルーター、アプリケーションプロセスが含まれ、効率的な管理と拡張をサポートします。 2)動的再構成により、CI/CD環境に適した、実行時に構成をシームレスに更新できます。 3)多言語サポートは、言語ランタイムの動的なロードを通じて実装され、開発の柔軟性が向上します。 4)イベント駆動型モデルと非同期I/Oによって高性能が達成され、高い並行性の下でも効率的なままです。 5)申請プロセスを分離し、アプリケーション間の相互の影響を減らすことにより、セキュリティが改善されます。

Nginxユニットの使用:アプリケーションの展開と管理Nginxユニットの使用:アプリケーションの展開と管理Apr 22, 2025 am 12:06 AM

nginxunitを使用して、アプリケーションを複数の言語で展開および管理できます。 1)nginxunitをインストールします。 2)PythonやPHPなどのさまざまなタイプのアプリケーションを実行するように構成します。 3)アプリケーション管理に動的構成関数を使用します。これらの手順を通じて、アプリケーションを効率的に展開および管理し、プロジェクトの効率を向上させることができます。

Nginx vs. Apache:Webサーバーの比較分析Nginx vs. Apache:Webサーバーの比較分析Apr 21, 2025 am 12:08 AM

NGINXは、高い並行接続の処理に適していますが、Apacheは複雑な構成とモジュール拡張が必要な​​シナリオにより適しています。 1.Nginxは、高性能と低リソース消費で知られており、高い並行性に適しています。 2. Apacheは、その安定性とリッチモジュール拡張機能で知られています。これは、複雑な構成ニーズに適しています。

Nginxユニットの利点:柔軟性とパフォーマンスNginxユニットの利点:柔軟性とパフォーマンスApr 20, 2025 am 12:07 AM

Nginxunitは、動的な構成と高性能アーキテクチャにより、アプリケーションの柔軟性とパフォーマンスを向上させます。 1.動的構成により、サーバーを再起動せずにアプリケーション構成を調整できます。 2.高性能は、イベント駆動型および非ブロッキングアーキテクチャおよびマルチプロセスモデルに反映され、同時接続を効率的に処理し、マルチコアCPUを利用できます。

Nginx vs. Apache:パフォーマンス、スケーラビリティ、効率Nginx vs. Apache:パフォーマンス、スケーラビリティ、効率Apr 19, 2025 am 12:05 AM

NginxとApacheはどちらも強力なWebサーバーであり、それぞれがパフォーマンス、スケーラビリティ、効率の点で独自の利点と短所を備えています。 1)nginxは、静的なコンテンツを処理し、逆プロキシを逆にするときにうまく機能します。 2)Apacheは、動的コンテンツを処理するときにパフォーマンスが向上し、リッチモジュールサポートが必要なプロジェクトに適しています。サーバーの選択は、プロジェクトの要件とシナリオに基づいて決定する必要があります。

究極の対決:Nginx vs. Apache究極の対決:Nginx vs. ApacheApr 18, 2025 am 12:02 AM

Nginxは、高い並行リクエストの処理に適していますが、Apacheは複雑な構成と機能的拡張が必要な​​シナリオに適しています。 1.Nginxは、イベント駆動型の非ブロッキングアーキテクチャを採用しており、高電流環境に適しています。 2。Apacheはプロセスまたはスレッドモデルを採用して、複雑な構成のニーズに適したリッチモジュールエコシステムを提供します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境