2009-06-05 9 views
20

Tomcatがlocalhostではなく正しい着信ホスト名を取得するように、HTTPプロキシを使用してApacheをTomcatに接続する方法はありますか?Apache + Tomcat:AJPの代わりにmod_proxyを使用する

ProxyPass /path http://localhost:8080/path 

をしかし、それは我々が同じサーバ上のサイトの束を持っているとき無用である、としてlocalhostを伝わってくる:私は、Apacheでこのディレクティブを使用しています。私は、サーバーの設定でホストを手動で設定できます

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      proxyName="pretend.host" proxyPort="80" /> 

をしかし、それは再び複数のサイトにサービスを提供しません。そして、私は、それぞれのサイトに異なる内部ポートを使用するという考えが嫌いです。それは本当に醜いと思います。

私はそれをプロキシするときにポートを転送する方法はありますか?

(私はAJPを使用していない理由を尋ねる場合、答えはthis errorです。私はTomcat and Apache entirelyをあきらめる前に、私はできる限りのことをしようとしている)あなたが複数のサイトをしたい場合、私はあなたの最善の策だと思い

答えて

36

設定は次のとおりです。私たちは、プロキシターゲットとしてlocalhostを使用している

<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> 

注意。 ProxyPreserveHostを有効にしているので、これを行うことができます。ドキュメントには、それは、元のホストヘッダーは、バックエンドサーバで評価する必要がプロキシマス名前ベースのバーチャルホスト、のような特殊な構成で、主に便利です

と述べています。

あなたのやりたいこととまったく同じです。

+1

優秀、それはまさに私が必要としていたものです。ありがとう! –

+0

あなたはどのように静的ファイルを扱いますか?私。 '/ static'から要求されたすべてのものをApacheにどのようにサーバーに伝えたらいいのでしょうか? – Luke

+0

@ルーク - ProxyPassMatchはあなたを助けます:http://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypassmatch –

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に表示されます。私は6つの別々のサイトをホストしている単一のサーバーを実行しています.3つのサイトはTomcatが戻ってきましたが、この方法を使用しています。あなたが探している

+0

我々はもちろんのApacheで仮想ホストを使用しているが、私はのlocalhostを使用していましたProxyPassディレクティブ代わりに適切なドメインを使用することは許容されますが、完全ではありません。要求が入ったドメインを上書きします。その情報は、その行の下で使用されます。 –

0

まだ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> 
関連する問題