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 で不明なフィールド名を回避する方法

推薦する

MySql8.0 のトランザクション分離レベルエラーの問題を解決する

目次MySql8.0 トランザクション分離レベルエラーの表示質問コマンドは次のように変更されますMy...

vue+elementUI で埋め込みテーブルを実装する方法の例

大学 4 年生のときのインターンシップ中に、表内のデータの番号をクリックすると、そのデータの下に新し...

JSの矢印関数におけるこのポイントの詳細な説明

矢印関数は ES6 の新機能です。独自の this はありません。その this ポイントは外部のコ...

MYSQL ローカルインストールと問題解決

序文この記事はかなり詳細で、少し面倒です。他のチュートリアル ドキュメントでは多くの手順が省略されて...

HTMLは入力完了を検出する機能を実装する

入力が進行中かどうかを検出するには、「onInput(event)」を使用しますコンテンツが変更され...

クールな点滅アラームボタンをおすすめします

効果は以下のとおりです。 コードは次のとおりです (クリックすると展開してソース コードが表示されま...

MySQL 外部キー制約の無効化と有効化コマンド

MySQL 外部キー制約の無効化と有効化: MySQL 外部キー制約が有効になっているかどうかは、グ...

MySQL countの詳細な説明と関数のサンプルコード

mysql countの詳細な説明count関数はテーブルや配列内のレコードを数えるために使われます...

Google の新しい UI から学べること (画像とテキスト)

2011 年に最も顕著なウェブサイトの変更は、一連の製品に新しいユーザー インターフェースを導入した...

ファイルのダウンロードを実現する javascript Blob オブジェクト

目次例示する1. ブロブオブジェクト2. フロントエンド3. バックエンド要約する例示する最近、ファ...

Spring Boot のパッケージ化と Docker リポジトリへのアップロードの詳細な手順

重要な注意: この記事を読む前に、Docker コンテナに関する知識と、一般的な Docker 操作...

UbuntuにCMakeをインストールするいくつかの方法の詳細な説明

CMakeをインストール sudo apt をインストール cmake この方法はインストールが簡単...

MySQLとElasticsearch間のデータ非対称性問題の解決策

MySQLとElasticsearch間のデータ非対称性問題の解決策jdbc-input-plugi...

Linux インストール Redis 実装プロセスとエラー解決

今日、redis をインストールしたところ、今までになかったいくつかのエラーが発生しました。ここで記...

HTMLにビデオを挿入してすべてのブラウザと互換性を持たせる方法

HTML にビデオを挿入するために最もよく使用される方法は 2 つあります。1 つは古い <o...