Nginx 502 Bad Gateway エラーの原因と解決策

Nginx 502 Bad Gateway エラーの原因と解決策

Nginx 502 Bad Gateway エラーに何度か遭遇しました。ここでメモしておこうと思います。


502 エラーが発生する状況は多数あります。それぞれの状況について個別に説明しましょう。

1. fastcgiバッファが小さすぎる

エラーが発生した場合は、まず /var/log/nginx ディレクトリ内の nginx ログ ファイルを探します。ログには次のエラーが見つかります。

2013/01/17 13:33:47 [エラー] 15421#0: *16 アップストリームからの応答ヘッダーの読み取り中にアップストリームが大きすぎるヘッダーを送信しました

情報を調べたところ、nginx バッファにバグがあり、当社の Web サイトのページがバッファを過剰に消費する可能性があることがわかりました。

ネットで解決策を探したところ、海外のウェブサイトでバッファを増やす方法を見つけ、Nginx 502 Bad Gateway の問題が完全に解決しました。方法は次のとおりです。

http {
  ...
  fastcgi_buffers 8 16k;
  fastcgi_buffer_size 32k;
  ...
}

サーバーやウェブサイトの状況に応じて、上記2つの設定項目を増やしてください。

2. プロキシバッファの設定が小さすぎる

nginx リバース プロキシを使用している場合、ヘッダーが大きすぎてデフォルトの 1k を超えると、上記のアップストリームから送信されたヘッダーが大きすぎるというエラーが発生します (簡単に言うと、nginx は外部リクエストをバックエンドに送信して処理しますが、バックエンドから返されるヘッダーが大きすぎて nginx が処理できず、502 が発生します)。

サーバー{
    聞く 80;
    サーバー名 *.lxy.me;
    位置 / {
################# 次の 3 行を追加します proxy_buffer_size 64k;
       プロキシバッファ 32 32k;
       proxy_busy_buffers_size 128k;
################ 次の 3 行を追加します proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
............
}

3. php-cgiプロセスのデフォルト数が少なすぎる

インストールおよび使用中に 502 エラーが発生した場合、通常は php-cgi プロセスのデフォルト数が 5 であることが原因です。502 は、phpcgi プロセスが不足していることが原因である可能性があります。/usr/local/php/etc/php-fpm.conf を変更し、max_children 値を適切に増やす必要があります。 max_requests 値が十分でない可能性もあります。これら 2 つの設定項目は大量のメモリを消費するので、サーバーの構成に応じて設定してください。そうしないと逆の効果が出る可能性があります。

4. PHP実行タイムアウト

PHP 実行タイムアウト。/usr/local/php/etc/php.ini を変更し、max_execution_time を 300 に変更します。

5. nginx 待機時間タイムアウト

一部の PHP プログラムの実行時間は、Nginx の待機時間を超えます。nginx.conf 構成ファイルで FastCGI のタイムアウト時間を適切に増やすことができます。

http {
 fastcgi_connect_timeout 300;
 fastcgi_send_timeout 300;
 fastcgi_read_timeout 300;
 .....
 }

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • nginx サーバーでの 502 不正なゲートウェイ エラーの原因のトラブルシューティング
  • Nginx 502 Bad Gateway エラーの 4 つの一般的な原因と解決策
  • 深掘り: Nginx 502 Bad Gateway エラーを修正する方法
  • フロントエンド例外 502 不正なゲートウェイの原因と解決策

<<:  MySQL 8.0.22 winx64 のインストールと設定方法のグラフィックチュートリアル

>>:  JavaScript シングルスレッドと非同期の詳細

推薦する

TypeScript の Enum が問題となる理由

目次どうしたの?いつ使うか列挙の数を制御するビット値コントロールインデックス非数値列挙結論はType...

画像プレビュー付きのアップロードフォームの完全な HTML

画像プレビュー機能付きのアップロードフォーム、完全なHTMLコードは次のとおりです。 <htm...

CSSスタイルの記述順序と命名規則と注意事項

書き順の重要性ブラウザのリフローを減らし、ブラウザのDOMレンダリングパフォーマンスを向上させる①:...

mysqlはエクスポートされたデータのsqlファイルから指定されたテーブルのみをインポートすることを実装します

シナリオ昨日、システムは dbAll.sql.gz という名前の特定のデータベースのすべてのテーブル...

Linux ソフトウェアのインストール場所を確認する簡単な方法

1. ソフトウェアのインストールパスを確認します。 Linuxソフトウェアをインストールできる場所は...

同じドメイン名を持つ Nginx プロキシのフロントエンドとバックエンドの分離プロジェクトの完全な手順

フロントエンド プロジェクトとバックエンド プロジェクトは分離されており、フロントエンドとバックエン...

Oracle10パーティションとMySQLパーティションの違いの詳細な説明

一般的に使用される Oracle10g パーティションは、範囲 (範囲パーティション)、リスト (リ...

Tomcat で JNDI データ ソースを構成する 3 つの方法

これまでの仕事では、開発サーバーは一般的にTomcatでした。データソースは、多くの場合、appli...

フロントエンドAIカットのコツ(体験談)

AI 画像の切り取りは PS と連携する必要があります。まず、スライスするレイヤーを選択し、それを...

アニメーションとトランジションの違い

CSS3アニメーションとJSアニメーションの違いJSはフレームアニメーションを実装しますCSS3はト...

Springboot+Vue-Cropperでアバターの切り取りとアップロードの効果を実現

アバターをアップロードするにはVue-Cropperコンポーネントを使用します。参考までに具体的な内...

Centos7.x での Nginx のインストール、SSL 設定、一般的なコマンドの詳細な説明

1. インストールyumを使用してインストールする ##yum nginx を自動的にインストールす...

CSS を使用して複数の方法で等幅レイアウトを実装するサンプルコード

この記事で説明する等幅レイアウトでは、純粋な CSS を使用して、要素の幅を手動で設定することなく、...

ホスト上のDockerコンテナ内でシェルまたはプログラムを実行する

Docker コンテナに繰り返し入って操作することを避けるために、コンテナ内の一連の命令をホストマシ...

CSS でテキストカラーグラデーションを実装する 3 つの方法

Web フロントエンド開発のプロセスでは、UI デザイナーはグラデーション テキストを使用したデザイ...