Tomcatがlocalhostではなく正しい着信ホスト名を取得するように、HTTPプロキシを使用してApacheをTomcatに接続する方法はありますか?私はこのディレクティブをApacheで使用しています:
ProxyPass /path http://localhost:8080/path
しかし、それはlocalhostとして届きます。これは、同じサーバー上に多数のサイトがある場合には役に立ちません。サーバー構成でホストを手動で設定できます:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
proxyName="pretend.Host" proxyPort="80" />
しかし、これは複数のサイトに対応していません。また、サイトごとに異なる内部ポートを使用するという考えは好きではありません。
プロキシするときにポートを転送する方法はありませんか?
(なぜ私がAJPを使用しないのかと尋ねると、答えは このエラー です。私はあきらめる前にできる限りのことを試みています TomcatとApache全体 )
探している設定は次のとおりです。
<VirtualHost *:80>
ServerName public.server.name
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
プロキシターゲットとしてlocalhostを使用していることに注意してください。 ProxyPreserveHost を有効にするため、これを行うことができます。ドキュメントには、
これは、プロキシされた大量の名前ベースの仮想ホスティングなど、元のホストヘッダーをバックエンドサーバーで評価する必要がある特殊な構成で主に役立ちます。
まさにあなたがしていることのように聞こえます。
同じサーバー上の複数のサイトが必要な場合は、Apache構成で仮想ホストを使用するのが最善の策だと思います。次に例を示します。
<VirtualHost *:80>
ServerName server.domain.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://server.domain.com:8080/
ProxyPassReverse / http://server.domain.com:8080/
<Location />
Order allow,deny
Allow from all
</Location>
外部DNSにserver.domain.comが登録されている限り、受信ホスト名はクライアントURLに表示されます。この方法を使用して、Tomcatによって戻された3つを含む6つの別個のサイトをホストする単一のサーバーを実行しています。
AJPは引き続き使用できますが、HTTPよりも高速であるため、使用する必要があります。必ずhttp.confで有効にしてください:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
その場合、この構成は私にとってはうまくいきます:
<VirtualHost *:80>
ServerName public.server.name
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / ajp://localhost:8080/
# ProxyPassReverse might not be needed,
# it's only for redirecting from inside.
# ProxyPassReverse / ajp://localhost:8080/
</VirtualHost>