Nginx 500 内部サーバーエラーの解決方法

Nginx 500 内部サーバーエラーの解決方法

今日、Nginxを使っていたら500エラーが発生しました。エラーコードを検索してみんなに共有しました。

500 (内部サーバー エラー) サーバーでエラーが発生したため、要求を完了できませんでした。
501 (実装されていません) サーバーにはリクエストを完了する機能がありません。たとえば、サーバーがリクエスト メソッドを認識しない場合、サーバーはこのコードを返すことがあります。
502 (Bad Gateway) サーバーはゲートウェイまたはプロキシとして機能しているときに、上流サーバーから無効な応答を受信しました。
503 (サービス利用不可) サーバーは現在利用できません (過負荷またはメンテナンスのため)。通常、これは一時的な状態です。
504 (ゲートウェイ タイムアウト) ゲートウェイまたはプロキシとして機能しているサーバーが、アップストリーム サーバーからの要求を適切なタイミングで受信しませんでした。
505 (HTTP バージョンがサポートされていません) サーバーは、要求で使用された HTTP プロトコル バージョンをサポートしていません。

Nginx 500 エラー (内部サーバー エラー): 500 エラーは内部サーバー エラーを指し、サーバーが予期しない状況に遭遇し、要求を処理できなかったことを意味します。

同時接続数が多い場合、Nginx は Apache サーバーの優れた代替手段となります。 Nginx はレイヤー 7 負荷分散サーバーとしても使用できます。テスト結果によると、Nginx 0.6.31 + PHP 5.2.6 (FastCGI) は 30,000 以上の同時接続を処理でき、これは同じ環境下での Apache の 10 倍です。

しかし、Nginx を使用すると 500 エラーが発生するケースが多くあります。私の経験では、次のような状況があります。

1. ディスク容量が不足していませんか?

df -k を使用して、ハードディスクの容量がいっぱいかどうかを確認します。ハードドライブの空き容量を増やすと、500 エラーを解決できます。 nginx でアクセス ログが有効になっている場合は、アクセス ログが必要ない場合は無効にすることをお勧めします。アクセス ログは大量のハード ディスク領域を占有します。

2. nginx 設定ファイルが間違っていますか?

これは構文エラーを指すものではありません。nginx 設定ファイルに構文エラーがある場合は、起動時にプロンプ​​トが表示されます。書き換えを設定する際に、一部のルールが適切に処理されず、500 エラーが発生する可能性があります。書き換えルールを慎重に確認してください。値のない変数を参照するなど、構成ファイル内の一部の変数が正しく設定されていない場合にも、500 エラーが発生することがあります。

3. 上記の問題がいずれも発生しない場合は、シミュレートされた同時実行数が多すぎる可能性があり、nginx.confの同時実行設定数を調整する必要があります。

4. もう1つの問題は、Linuxインデックスノード(inode)がいっぱいで障害が発生することです。df -i

inode の満杯により発生する 500 問題 https://www.jb51.net/article/175430.htm

inode は中国語でインデックス ノードと翻訳されます。各ストレージ デバイス (ハード ディスクなど) またはストレージ デバイスのパーティションがファイル システムとしてフォーマットされると、2 つの部分 (inode とブロック) が作成されます。ブロックはデータを保存するために使用されます。 inode は、ファイル サイズ、所有者、ユーザー グループ、読み取りおよび書き込み権限などのデータ情報を保存するために使用されます。 inode は各ファイルの情報をインデックスするため、inode 値が存在します。オペレーティング システムは、指示に基づいて inode 値を通じて対応するファイルをできるだけ早く見つけることができます。 サーバーにはまだブロックが残っていますが、inode はいっぱいです。そのため、新しいディレクトリまたはファイルを作成するときに、ディスク容量が不足していることを示すメッセージが表示されます。

一般的な分析のアイデア:

(1)nginxエラーログとphpエラーログを確認する

nginx エラー ログ error.log のデフォルトの場所: /usr/local/nginx/logs

(2)開いているファイルが多すぎる場合は、nginxのworker_rlimit_nofileパラメータを変更し、ulimitを使用してシステムの開いているファイルの制限を確認し、/etc/security/limits.confを変更します。

(3)スクリプトの問題であれば、スクリプトエラーを修正し、コードを最適化する必要がある。

(4)すべての最適化が完了した後も開いているファイルが多すぎる場合は、トラフィックを異なるサーバーに分散する負荷分散を検討する必要があります。

解決策は次のとおりです:

1 /etc/security/limits.confファイルを開き、2つの文を追加します。

コードは次のとおりです。

* ソフトノーファイル 65535
* ハードnofile 65535

2 /etc/nginx/nginx.confを開く

worker_processesの下に1行追加する

コードは次のとおりです。

ワーカー_rlimit_nofile 65535;

3 nginxを再起動して設定をリロードする

コードは次のとおりです。

kill -9 `ps -ef | grep php | grep -v grep | awk '{print $2}'`
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 100 -u www-data -f /usr/bin/php-cgi
キルオール -HUP nginx

再起動後、nginx エラー ログを確認しましたが、500 エラーは見つかりませんでした。

4. データベースの問題かもしれません。nginx ログと php ログでは問題は見つかりませんでした。最終的に、データベースにアクセスできないことがわかりました。修正後、問題は解決しました。

上記の方法でも問題が解決しない場合は、設定またはプログラムにエラーがある可能性があります。

1 nginx エラー ログをチェックして、考えられる原因を見つけます。

一部の PHP 拡張機能がインストールされていないというメッセージが表示されたら、php.ini に移動して対応する拡張機能を開くか、対応する拡張機能をインストールし、nginx と php-fpm を再起動して、ページを再度更新します。

2 データベース接続に問題がある場合は500エラーも発生する可能性がありますが、ログには必ず反映されます

ログに、対応するデータベース接続に問題があることが示されている場合は、データベース接続が正しいかどうかを確認する必要があります。ログに従って、対応するファイルを変更します。データベースの問題が解決されると、ページは正常に戻ります。

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

以下もご興味があるかもしれません:
  • PHP+nginx サービス 500 502 エラーのトラブルシューティングのアイデアの詳細な説明
  • nginx プロンプト: 500 内部サーバー エラー エラーの解決方法
  • Nginx の worker_connections 設定が低すぎるため、500 エラーが発生します
  • nginx プロンプト: 500 内部サーバー エラーの解決方法

<<:  MySQLでよく使われる4つのストレージエンジンについて簡単に説明します。

>>:  HTMLからReactを実装する方法を教えます

推薦する

Dockerイメージ解析ツールのダイブ原理解析

今日は、Docker イメージ、各レイヤーの内容を調べ、Docker/OCI イメージのサイズを縮小...

MySQL における datetime と timestamp の違いと使い方

1. MySQL で現在の時刻を表現するにはどうすればよいでしょうか?実際、表現方法はいろいろありま...

MySQL はどのようにしてマスターとスレーブの同期を実現するのでしょうか?

マスタースレーブ同期 (マスタースレーブレプリケーションとも呼ばれる) は、マスタースレーブデータの...

MySQL MHA 操作ステータス監視の概要

目次1. プロジェクトの説明1.1 背景1.2 実装設計1.2.1 従来の方法1.2.2 最適化され...

Windows Server 2008 R2 サーバーが理由もなく自動的に再起動する問題の解決策

Windows Server 2008 サーバーが自動的に再起動します。サーバーにログインした後、ど...

JavaScript ESの新機能letとconstキーワードに基づく

目次1. letキーワード1.1 基本的な使い方1.2 変動昇進はない1.3 一時的なデッドゾーン1...

DIVのぼかし機能を実装する方法

マウスを動かしたときにDIVが消えるように手ぶれ補正を使用するdiv タグ自体は onblur イベ...

LinuxにMySQLをインストールし、外部ネットワークアクセスを構成する例

設定手順1. DNSが設定されているかどうかを確認するDNSが設定されていない場合は、前の記事を参照...

Centos7.5でのIPアドレス設定の実装

1. IPアドレスを設定する前に、まずifconfigを使用してネットワークカード情報を表示し、ネッ...

MySQLの起動と接続方法の例分析

目次mysqldの起動方法方法 1: mysqld方法 2: mysqld_safe方法3: mys...

HTML でフォーム入力やその他のテキスト ボックスを読み取り専用にして編集不可にする方法

場合によっては、フォーム内のテキスト ボックスを読み取り専用にして、ユーザーがその中の情報を変更でき...

Dockerコンテナが外部ネットワークにpingできない問題を解決する

今日、docker で redis 環境を構築していたところ、yum がリソースを取得できず、インタ...

MySQL データベース インデックスの面接の質問 (基本的なプログラマー スキル)

目次導入インデックスの原則1. データページ2. ページディレクトリ3. インデックス原則分析要約す...

Linux サーバーが処理できる接続数をご存知ですか?

序文まず、TCP 接続を識別する方法を見てみましょう。システムは、(src_ip、src_port、...

Linuxでポートが開いているかどうかを確認する方法のまとめ

方法1: lsofコマンドを使用するlsof コマンドを使用して、ポートが開いているかどうかを確認で...