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を実装する方法を教えます

推薦する

MySQL でスロークエリを有効にする方法の例

序文スロー クエリ ログは、MySQL で非常に重要な機能です。MySQL のスロー クエリ ログ機...

MySQL関数の簡単な紹介

目次1. 数学関数2. 文字列関数3. 日付関数4. 暗号化機能主な MySQL 関数は次のように紹...

Windows での MySQL 8.0.15 の詳細なインストールと使用のチュートリアル

この記事では、MySQL 8.0.15の詳細なインストールと使用方法のチュートリアルを参考までに紹介...

HTML ページでコンテンツの選択、コピー、右クリックを防止する方法の詳細な説明

時には、Web ページに掲載されているコンテンツが悪意のある人物に盗用されるのを望まないため、Web...

リフレッシュリダイレクトを実現する HTML ヘッドタグメタ

コードをコピーコードは次のとおりです。 <html> <ヘッド> <m...

JavaScriptの原理と方向性

これが何を指しているのかをどのように判断するのでしょうか? ①グローバル環境で呼び出された場合はwi...

MySQL 5.7.18 MSI インストール グラフィック チュートリアル

この記事では、参考までにMySQL 5.7.18 MSIインストールチュートリアルを紹介します。具体...

MySQL Undo ログと Redo ログの概要

目次元に戻すログUNDOログの生成と破棄UNDOログの保存元に戻すログ機能トランザクションの原子性の...

docker公式mysqlイメージのカスタム構成の詳細な説明

インストール時間を節約するために、公式の mysql docker イメージを使用して mysql ...

CentOS 7 で Docker のポート転送をファイアウォールと互換性のあるように設定する方法

CentOS 7 では、次のようなコマンドを使用してホスト ポートをコンテナー ポートにマッピングす...

Mysql の読み取り/書き込み分離期限切れに対する一般的な解決策

MySQLの読み書き分離の落とし穴読み取りと書き込みの分離の主な目的は、メイン データベースの負荷を...

MySQLクエリのパフォーマンスに影響を与える大きなオフセットの理由と最適化の詳細な説明

序文MySQL クエリは select コマンドを使用し、limit および offset パラメー...

MySQLログに関する知識のまとめ

目次SQL実行順序ビンログ何ですかいつ生産されるのか何の役に立つんだディスクはいつドロップされますか...

react-diagram シリアル化 Json 解釈 ケース分析

このドキュメントの目的はreact-diagramフレームワーク モデルの Json シリアル化を説...

MySQLクラスタのDockerデプロイメントの実装

シングルノードデータベースの欠点大規模なインターネットプログラムはユーザーベースが大きいため、アーキ...