ホームページ  >  記事  >  バックエンド開発  >  nginx php-fpm の 502 不正なゲートウェイ例外の解決策

nginx php-fpm の 502 不正なゲートウェイ例外の解決策

WBOY
WBOYオリジナル
2016-06-13 12:18:181239ブラウズ

nginx php-fpm の 502 不正なゲートウェイ エラーの解決策

1. nginx エラーで場所が見つからない場合は、通常、/usr/local/nginx/conf/nginx.conf を変更する必要があります (慎重に変更してください)。他のウェブサイトの問題を引き起こす可能性があります)

2,502 エラー

ケース 1: nginx がハングする:

コマンド: /usr/local/nginx/sbin/nginx -s reload

しばらく待ちます

ケース 2: PHP がハングします:

まず、/usr/local/php-5.6.0/etc/php-fpm.conf ファイルのパラメータを変更する必要があります。

次に、次のコマンドの 1 つ以上を使用して、構成 /usr/local/php-5.6.0/sbin/php-fpm reload

/ を再起動します。 usr/local/php-5.6.0/sbin/php-fpm

/usr/local/php-5.6.0/sbin/php-fpm -h

/usr/local/php-5.6.0/sbin/php-fpm–t

/usr/local/php-5.6.0/sbin/ php- fpm–R

最後に nginx を再起動し、しばらく待ちます

上記の方法が機能しない場合は、次のことを試すことができます

1. php-fpm プロセスの数が足りません

netstat を使用します-napo |grep "php-fpm" | wc -l 現在の fastcgi プロセス数を確認し、conf で設定した上限に近い場合はプロセス数を増やす必要があります。

ただし、サーバーのメモリに応じて php-fpm サブプロセスの数を 100 以上に調整できます。4G メモリを搭載したサーバーでは 200 です。十分。

2. Linux カーネルによって開かれるファイルの数を増やします

次のコマンドを使用できます (root アカウントである必要があります)

echo 'ulimit -HSn 65536' >> 🎜>

echo 'ulimit -HSn 65536' >> /etc/rc.local

source /etc/profile

3. スクリプトの実行タイムアウト

スクリプトが長時間待機してもタイムアウトしない場合何らかの理由で戻り、新しいリクエストが発行されて処理できない場合は、次の構成を適切に調整できます。

nginx.conf には主に次の内容が含まれます:

fastcgi_connect_timeout 300;
fastcgi_read_timeout 300;

request_terminate_timeout = 10s

4. キャッシュ設定は比較的小さいです

nginx.conf への構成の変更または追加

proxy_buffer_size 64k;proxy_buffers 512k;proxy_busy_buffers_size 128k;



5. アップストリームからの応答ヘッダーの読み取り中に、recv() が失敗しました (104: ピアによる接続リセット)

考えられる理由 コンピューター ルーム ネットワークでパケットが失われますまたは、コンピューター室にドメイン名へのアクセスを禁止するハードウェア ファイアウォールがあります

しかし、最も重要なことは、プログラム内でタイムアウトを設定することです。php-fpm の request_terminate_timeout を使用しないでください。

request_terminate_timeout=0;

このパラメータは PHP プロセスを直接強制終了し、PHP プロセスを再起動するため、フロントエンド nginx は 104: ピアによる接続のリセットを返します。このプロセスは非常に遅く、全体的に Web サイトが停止しているように感じられます。

5 月 01 日 10:50:58.044162 [警告] [プール www] 子 4074、スクリプト '/usr/local/nginx/html/quancha/sameip/detail.php' の実行時間が制限されました出力 (15.129933 秒)、終了5 月 01 日 10:50:58.045725 [警告] [プール www] 子 4074 は開始から 90.227060 秒後のシグナル 15 SIGTERM で終了しました5 月 01 日 10:50:58.046818 [通知] [ pool www] child 4082 starting


最も重要なことは、プログラム内でタイムアウトを制御することです。タイムアウトは、gethostbyname、curl、file_get_contents およびその他の関数に設定する必要があります。

もう 1 つは Duoshuo です。これは Web サイトのインタラクティブ性を高めますが、Web サイトがタイムアウトして Duoshuo が使用されている場合は、応答が遅くなります。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。