リバースプロキシと要求された URL を認識する Tomcat

リバースプロキシと要求された URL を認識する Tomcat

私は、Apache リバース プロキシが SSL 要求を終了するインフラストラクチャ セットアップを構成しました。次に、要求は別のフロントエンド Apache Web サーバーにプロキシされ、このサーバーは mod_jk/AJP 経由で Tomcat に接続されます。セットアップは、例外なくスムーズに実行されているようです。Tomcat は WSDL Web サービスを提供し、これらの XML ファイル内の 1 つのタグには、要求された URL と同じであるはずのホストの場所が含まれています。

現在の設定では、ホストの場所は (ajp に接続された) フロントエンド Web サーバーの内部 URL を表し、要求された外部 URL を表しません。この問題を解決する最初の試みは、外部 URL を tomcats server.xml 内のプロキシ URL として配置することでしたが、この方法では HTTP または HTTPS 要求を認識しません。どちらかを判断する必要があります。

さらに、現在、これらのサービスにはまったく別の URL を持つ他のフロントエンド サーバー経由でもアクセスできます (リバース プロキシを使用しないよりシンプルなセットアップ)。

私の問題が分かりやすく説明できたことを願っています。Tomcat に要求された URL を認識させるにはどうしたらよいでしょうか。あるいは、要求された URL をフロントエンドの Apache に渡すべきでしょうか。現時点では、少し行き詰まっています。

前もって感謝します。

/編集

リクエストシーケンスの簡単な概要:

**customerX** -- REQUEST HTTP|HTTPS -- **host.external/customerX** -- PASS HTTP -- **customerX.internal** -- AJP -- **tomcat**

ProxyPreserveHost オンこれは、フロントエンドの Apache に host.external を渡すため、この仮想ホストに一致する仮想ホストが存在せず、404 エラーが発生するため、うまくいきません (説明不要)。

設定はまったく特別なものではありません。外部からアクセス可能なリバース プロキシには 2 つの仮想ホスト (HTTP|HTTPS) があります。両方の仮想ホストは、コンテキスト /customerX、/customerY などでサービスを提供する各顧客を認識します。たとえば、HTTP 仮想ホストは次のようになります。

<VirtualHost *:80>
ServerName host.external

ProxyPass /customerX http://customerX.internal
ProxyPassReverse /customerX http://customerX.internal

ProxyPass /customerY http://customerY.internal
ProxyPassReverse /customerY http://customerY.internal

...
</VirtualHost>

わかっています、2行目は暗黙的です。

2 番目の Apache には、対応するサーバー名と Tomcat Web アプリケーションに必要な JkMounts を持つ各顧客用の仮想ホスト (HTTP のみ) が 1 つあります。

<VirtualHost *:80>
        ServerName customerX.internal

        JkMount ... 
</VirtualHost>

関連情報