TomcatはNginxリバースプロキシのクライアントドメイン名を取得します

TomcatはNginxリバースプロキシのクライアントドメイン名を取得します

質問

Nginx リバース プロキシの後、Tomcat アプリケーションは、クライアント ブラウザーのアドレス バーにある実際のドメイン名ではなく、 request.getHeader("host")を通じて Nginx ホストを取得します。

たとえば、あるサーバーでは、Tomcat のポート番号は 8080、Nginx のポート番号は 80、Nginx リバース プロキシのポート番号は 8080 です。

サーバー{
  聞く 80;
  位置 / {
    プロキシパス http://127.0.0.1:8080;
  }
}

別のマシンで、ブラウザを使用してhttp://haha/testを開き、Tomcat のアプリケーションにアクセスしてクライアント ドメイン名を取得します。

System.out.println(リクエストのgetHeader("ホスト"));

消す:

ローカルホスト:8080

問題の原因

Nginx のリバース プロキシは、実際にはクライアントと実際のアプリケーション サーバー間のブリッジです。クライアント (通常はブラウザー) が Nginx サーバーにアクセスし、その後 Nginx が Web アプリケーション サーバーにアクセスします。 Web アプリケーションの場合、この HTTP リクエストのクライアントは実際のクライアント ブラウザではなく Nginx です。特別な処理を行わない場合、Web アプリケーションは Nginx をリクエスト クライアントと見なし、取得されるクライアント情報は Nginx に関する情報になります。

問題解決

Nginx は HTTP ヘッダーを構成します。ホストにはクライアントの実際のドメイン名とポート番号が含まれます

proxy_set_header ホスト $http_host;

Tomcat は、Nginx から渡された HTTP ヘッダーからクライアント情報を取得します。

<Valve クラス名="org.apache.catalina.valves.RemoteIpValve" />

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Tomcat が https アクセスをサポートするための手順の説明
  • Tomcat+Mysql の高同時実行構成の最適化の説明
  • Tomcatのデフォルトプログラム公開パスの使用と変更についての説明
  • Ideaはプロジェクトのデプロイメントを実装するためにmaven-tomcat-pluginを設定します
  • Intellij idea で異なる Tomcat を使用して Maven プロジェクトをコンパイルするためのサーバー パス メソッドの詳細な説明
  • Eclipse プロジェクトを IDEA にインポートし、Tomcat にデプロイするための詳細な手順
  • TomcatとSpringのイベントメカニズムの詳細な説明
  • Eclipse Tomcat OutOfMemoryError: PermGen spaceの問題を解決する
  • Spring Boot は Thymeleaf + Gradle を使用して Tomcat との戦争をビルドします
  • Tomcat でのコネクタ構成

<<:  タイムスタンプの差を計算するSQLメソッド

>>:  MySQL で不明なフィールド名を回避する方法

推薦する

Win10 での MySQL 8.0.15 のインストールと設定のグラフィック チュートリアル

この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...

Q&A: XML と HTML の違い

Q: xml と html の違いがわかりません。違いは何ですか? A: XMLと HTML の違い...

Docker のホスト間コンテナ通信オーバーレイ実装プロセスの詳細な説明

サーバーも 2 つあります。準備:コンテナのホスト名を設定する consul: kv タイプのストレ...

MySQL インデックスの長所と短所、およびインデックス作成のガイドライン

1. インデックスを作成する理由(メリット)インデックスを作成するとシステムのパフォーマンスが大幅に...

CentOS VPS に SSH 経由で MySQL をインストールする方法

yum install mysql-serverと入力します。続行するにはYを押してくださいインスト...

CSSを使用してTDのINPUTの幅を設定する

最近、C# を使用して Web プログラムを作成していたときに、次のような問題が発生しました。 Te...

Linux で AIDE に基づいてファイルシステムの整合性を検出する方法

1. 補助AIDE (Advanced Instruction Detection Environm...

divの適応高さは残りの高さを自動的に埋めます

シナリオ 1: HTML: <div class="outer"> ...

Linux の一般的なハードディスク管理コマンドの紹介

目次1. dfコマンド2. duコマンド3. fsckファイルシステム修復コマンド4. ディスクステ...

フロントエンドHTMLスキン変更機能の実装コード

透明を含む5つの肌の色を変更するには50行のコードが必要です最初にコードをお渡ししますので、ご自身で...

ブラウザ内でHTMLタグを中央に配置するCSSスタイル

CSS スタイル:コードをコピーコードは次のとおりです。 <スタイル タイプ="te...

練習と面接のための Linux シェル スクリプトのヒント 9 つを共有する

予防1) 先頭にインタープリターを追加します: #!/bin/bash 2) 構文のインデントに 4...

Linux で gdb を使用してコア ファイルをデバッグする方法

1.コアファイルプログラム実行中にセグメンテーション エラー (コア ダンプ) が発生すると、プログ...

JavaScript でドラッグ スライダー パズルの検証機能を実装します (html5、canvas)

導入:スライダー ドラッグ検証は現在、多くの場所で使用されています。週末に 1 つ作成しようと思い、...

スケジュールされた時間に古いジャンクファイルを自動的に削除する Linux 用の Autotrash ツール

Autotrash は、古い削除済みファイルを消去するプロセスを自動化するコマンド ライン プログラ...