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

推薦する

Nginx レベルで基本的なユーザー認証を構成する手順を完了します。

序文アプリケーション シナリオ: おそらく、内部 Web サイトは外部ユーザーにアクセス可能である必...

XHTML の一般的なタグ

XHTML タグとは何ですか? XHTML タグ要素は、XHTML ドキュメントの基本的なコンポーネ...

Ubuntu 18でターミナルを美しいコマンドラインプロンプトに変更する方法

VMware と Ubuntu を再インストールしましたが、コマンドラインプロンプトが単調すぎて美し...

特定の MySQL テーブルの完全データと増分データをメッセージ キューに同期する - ソリューション

目次1. 当初の需要2. 解決策3. 運河の導入と設置運河の仕組み建築インストール4. 検証1. 当...

Docker ベースの GitLab 環境をデプロイする方法と手順

注意:仮想マシンのメモリは2G以上が推奨され、 Alibaba Cloudのアクセラレーションイメー...

イメージのパッケージ化とワンクリック展開を実現するためにDockerを組み合わせたアイデア

1. サーバーにDockerをインストールする yumでdockerをインストール設定ファイルを変更...

JavaScript BOMの構成と一般的なイベントの詳細な説明

目次1. 部品2. BOMの構成2. ウィンドウオブジェクトの共通イベント1. ウィンドウ読み込みイ...

HTML で入力テキスト入力キャッシュのクリアを禁止する 2 つの方法

ほとんどのブラウザはデフォルトで入力値をキャッシュし、ctl+F5 を使用して強制的に更新することに...

ES9の新機能の詳細な説明: 非同期反復

目次非同期トラバーサル非同期反復可能トラバーサル非同期反復生成非同期メソッドと非同期ジェネレーター非...

浮遊要素によって引き起こされる問題と解決策の詳細な説明

1. 問題複数のフローティング要素は親要素の幅を拡張できず、親要素の高さが 0 になる可能性がありま...

vue.js ベースの QQ チャット ルーム

目次導入効果のデモンストレーションは次のとおりです。 MChat コンポーネントのレンダリング: I...

JavaScript コンストラクタとプロトタイプの関係

目次1. コンストラクタとプロトタイプ1. コンストラクター2. コンストラクタ問題3. コンストラ...

Vue の DOM の非同期更新の簡単な分析

目次Vue が DOM を非同期更新する原理1 実際の DOM 要素を取得できるのはいつですか? 2...

Linux は suid vim.basic ファイルを使用して権限昇格を実現します。

カリで再現まず、必要なvim.basicファイルにsuid権限を設定します。 chmod u+s /...

WeChatアプレットが検索ボックス機能を実装

この記事の例では、WeChatアプレットの検索ボックス機能を実装するための具体的なコードを参考までに...