21

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 を完全にあきらめる前に、できる限りのことを試しています)

4

3 に答える 3

40

探している設定は次のとおりです。

<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を有効にしているため、これを行うことができます。ドキュメントには、

これは、元の Host ヘッダーがバックエンド サーバーによって評価される必要がある、プロキシされたマス ネーム ベースの仮想ホスティングなどの特別な構成で最も役立ちます。

あなたがしていることとまったく同じように聞こえます。

于 2009-06-07T22:05:02.360 に答える
5

同じサーバー上に複数のサイトが必要な場合の最善の策は、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つの別々のサイトをホストする単一のサーバーを実行しています。

于 2009-06-05T16:01:44.957 に答える