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

推薦する

Node.js+expressメッセージボード機能実装例

目次メッセージボード必要なライブラリオープンソースプロジェクトプロジェクト構造メッセージボードnod...

MySQL ピボットテーブルについての簡単な説明

次のような製品部品表があります。一部 部品ID 部品タイプ 製品ID ---------------...

カーソル ループを使用して、MySQL ストアド プロシージャで一時テーブルを読み取る

カーソルカーソルは、結果セット内のデータを表示または処理するために使用される方法です。カーソルを使用...

Linux の操作とメンテナンスの基本 httpd 静的 Web ページ チュートリアル

目次1. ウェアハウスを使用してhttpd lrzsz解凍ファイルを作成する2. ソースコードファイ...

MySQL双方向バックアップの実装方法

MySQL 双方向バックアップはマスター-マスター バックアップとも呼ばれ、両方の MySQL サー...

ノードをMySQLデータベースに接続する際に発生する問題と解決策

今日、MySQL の新しいバージョン (8.0.21) をインストールしましたが、ノード フレームワ...

Vue3における7種類のコンポーネント通信の詳細

目次1. Vue3コンポーネント通信方式2. Vue3通信の使い方2.1 小道具2.2 $エミット2...

MySQL はデータベースを動的に更新します スクリプト例の説明

具体的なupgradeスクリプトは次のとおりです。インデックスを動的に削除する アップグレードが存在...

ネイティブ JS オブジェクト指向タイピング ゲーム

この記事では、JSオブジェクト指向タイピングゲームの具体的なコードを参考までに紹介します。具体的な内...

HTMLページが3秒後に自動的にジャンプする3つの一般的な方法

実際には、N 秒後にページを自動的にジャンプさせるにはどうすればよいかという問題によく遭遇します。私...

ES6 ループと反復可能オブジェクトの例

この記事では、ES6 の for ... of ループについて説明します。古い方法以前は、JavaS...

Windows 上の Docker にさまざまなソフトウェアをインストールする詳細なプロセス

1. MySQLをインストールする # docker で mysql をダウンロード docker ...

WeChatアプレット+EChartsで動的更新プロセス記録を実現

序文最近、小さなプログラムでリアルタイムにチャートを更新するという要件に遭遇しました。最初は wx-...

MySQL における in と exists の使い方と違いの紹介

まずコードを書いて (int i=0;i<1000;i++){ (int j=0;j<5...

MySQLデータ内の多数の改行と復帰に対する解決策

目次問題を見つける1. 改行と復帰を削除する方法2. SELECTクエリで「改行と復帰」を無視する方...