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

推薦する

VSCode と SSH を使用したリモート開発

0. リモート開発が必要な理由組み込み Linux を開発する場合、便宜上、通常は Windows ...

Vue+Openlayer で select を使用して要素を選択する実装コード

効果画像: 実装コード: <テンプレート> <div id="map&q...

Centos7 での python3 のインストールとアンインストールに関するチュートリアル

1. Python 3をインストールする1. 依存パッケージをインストールしますyum instal...

MySQL 5.6 の「暗黙的な変換」によりインデックスが失敗し、データが不正確になる

背景SQL クエリを実行するときに、where 条件の vachar 型フィールドの単一引用符を削除...

ルート権限なしでログインするためのDockerソリューション

docker コマンドを初めて使用する場合、権限の問題を確認するメッセージが表示されます。 unix...

ハイパーリンクに関するいくつかの質問

ポテトチップスパーティーのこのエピソードに参加して、何人かの友人に会えてとても嬉しいです。思いがけず...

HTML ハイパーリンク スタイル (4 つの異なる状態) の設定例

コードをコピーコードは次のとおりです。 <スタイル タイプ="text/css&qu...

MySQLとOracleの違いを簡単に説明してください

1. Oracle は大規模データベースですが、MySQL は小規模から中規模のデータベースです。O...

使用場所によって混乱しやすいXHTMLタグ

<br />jb51.net では、常に記事のセマンティクスを重視してきましたが、HTM...

Nest.js のハッシュと暗号化の例の詳細な説明

0x0 はじめにまず、ハッシュアルゴリズムとは何でしょうか?メッセージやセッション項目など、一部のデ...

ドロップダウンメニューを実装するためのネイティブ js

ドロップダウン メニューも実生活では非常に一般的です。実装に使用される js コードは、タブ選択やア...

uniappのグローバル変数実装の詳細な説明

序文この記事では、uniapp グローバル変数の実装方法をいくつかまとめています。詳細な知識は、uV...

MySQL インデックスの知識の要約

MySQL インデックスの確立は、MySQL の効率的な操作にとって非常に重要です。インデックスによ...

Navicat Premium15 でクラウド サーバーに接続する際のデータベースの問題と落とし穴

クラウドサーバーを使用するとデータベースに接続できる場合もありますが、Navicat Premium...