Nginx ポート競合を解決するトラブルシューティング方法の例

Nginx ポート競合を解決するトラブルシューティング方法の例

問題の説明

データ転送に Nginx を使用し、フロントエンドとバックエンドが分離された Spring + Angular プロジェクト。

Nginx はポート 8100、フロントエンド ポート 4200、バックエンド ポート 8080 をリッスンします。

いつものように、事前に MySQL と Redis を設定し、プロジェクトの Nginx 設定ファイルをインポートしてから、フロントエンドとバックエンドを正常に起動します。

その後、問題が発生しました。フロントエンドによって開始されたリクエストのうち、バックエンドで受信できるのはごく少数で、そのほとんどが 404 でした。ブラウザをクリックすると、コンソールに 404 が表示され続けました。

404 だけの場合、問題は非常に単純で、Nginx ポート転送設定が間違っている可能性が非常に高くなります。しかし、魔法のようなのは、バックグラウンドに到達できるリクエストがまだいくつかあるということです。

(上の画像では、保存が成功すると、背景に関連するコンソール情報が出力されます)

他の友達はこの問題を抱えていなかったので、私は調査を始めました。

トラブルシューティングのプロセス

バックエンドの問題なのか、 Nginx転送の問題なのかを判断するには、まずブラウザのネットワークから、404 がバックエンドから返されたのか、Nginx から返されたのかを確認する必要があります。

確認してみると、Nginx によって返されたことがわかりました。バックグラウンドが 404 を返す場合、エラー情報が HTTP リクエスト ヘッダーに書き込まれます。

まず、リスニング ポートに競合がないか確認します。nginx -T を使用して、インポートされた外部ファイルを含む完全な Nginx 構成ファイルを表示します。

// 設定ファイルが正しいかどうかをテストし、完全な設定ファイルを出力します nginx -T 

出力結果には 8100 のみが表示されており、複数のプロジェクトが導入されているにもかかわらず、リスニング ポートの競合がないことがわかります。

次に、Nginx ログからいくつかの手がかりを探す予定です。

Nginx のログ モードをオンにした後、ログ ファイルを確認すると、数千件のアクセス レコードが見つかりました。

大部分は 404 で、いくつかは 200 ですが、ログにはそれほど役立つ情報は提供されません。

最終的に、構成ファイルに問題が見つかりました。

HomeBrew を使用してインストールされた Nginx の場合、グローバル構成ファイルのデフォルトのリスニング ポートは 8080 であり、プロジェクト バックエンドが占有するポートも 8080 です。

ポート監視とポート占有の原理についてはよく分かりませんが、少なくとも、Nginx はポート 8080 を監視するため、一部のリクエストは Nginx 自体に送信され、他の部分はバックグラウンドに送信されることは分かっています。

したがって、グローバル構成ファイルを変更し、デフォルトのポートを変更すると、問題は解決します。

// 設定ファイルを変更する sudo vim /usr/local/etc/nginx/nginx.conf
// テスト設定ファイル nginx -t
// Nginxを再起動
nginx -s リロード

最後に、すべてのリクエストがバックエンドに到達できるようになります。

要約する

XAMPP を学び始めた頃、「ポート 80 で競合がある場合は、ポートを変更してください。たとえば、8080 に変更してください」とよく聞きました。

しかし、8080 が習慣になると、いくつかのプロジェクトでもこのポートが使用されるようになるため、競合の問題を解決する必要があります。

将来的にデフォルト ポートを変更する場合は、プロジェクトのポートとの競合を避けるために、10000 を超えるポート番号など、使用される可能性が低いポートに変更することをお勧めします。

Nginx ポート競合を解決するためのトラブルシューティング方法の例については、これで終わりです。Nginx ポート競合のトラブルシューティング方法についての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • nginxとバックエンドポート間の競合の解決策

<<:  ネイティブ js カスタム右クリック メニュー

>>:  mysqlはストアドプロシージャを使用してツリーノード取得メソッドを実装します。

推薦する

CSS を使用して画像の下の空白を数ピクセル消去する方法の詳細な説明

最近、友人が私に質問をしました。ページをレイアウトすると、画像の下に 1 ~ 2 ピクセルの空白があ...

超大型フォントを使用した 40 の Web ページ デザイン

今日の Web デザインでは、非常に大きなフォントが表示される傾向があります。これらのオープンソース...

nginxのシンプル転送リクエストのサーバーとロケーション設定の詳しい説明

nginx のサーバーと場所の構成を簡単に整理してみましょう。たとえば、URL: www.mask_...

MySQL シリーズ 6 のユーザーと認証

目次チュートリアルシリーズ1. ユーザー管理1. ユーザーアカウント2. アカウントの追加と削除3....

MySQL で結合を使用して SQL を最適化する方法の詳細な説明

0. 以下のテストに関連する表を準備する関連するテーブル作成ステートメントについては、https:/...

HTML CSS に基づく検索アイコン付き検索ボックス機能を実装する

序文フロントエンドで非常に便利な、小さなアイコン付きの検索ボックスを作成する方法をご紹介します。エフ...

Nginx をベースに特定の IP への短期アクセス数を制限する

特定の期間内に特定の IP へのアクセス回数を制限する方法は、特に悪意のある DDOS 攻撃に直面し...

JS を使用してバイナリ ツリー トラバーサル アルゴリズムのサンプル コードを実装する

目次序文1. バイナリツリー1.1. 二分木の走査1.2. jsを使用してバイナリツリーを表現する1...

Vue バッチ更新 DOM 実装手順

目次シーン紹介深い応答性トリガーゲッターDep.targetを探すゲッターセッター要約するシーン紹介...

ウェブページでグレーまたはブラックモードを実現するための CSS3 フィルターコード

フロントエンドcss3 フィルターは、Web ページのグレー効果を実現できるだけでなく、ナイト モー...

純粋なCSSを使用してスイッチ効果を実現する

まずアイデアはこの効果を実現するには、 <input type="checkbox&...

Web ベースの電子メール コンテンツの HTML フォーマット標準の概要

1. ページ要件1) 標準のヘッダーとフッターを使用するXML/HTML コードコンテンツをクリップ...

CentOS の Nginx 公式 Yum ソースの設定を詳しく解説

私はプロジェクトの展開にAlibaba Cloudから購入したCentOSを使用しています。最近、プ...

Docker x509 の安全でないレジストリ問題を解決する

Docker をインストールした後、会社が構築したプライベート サーバー Harbor からプルしよ...