0

ハードウェアロードバランサーを指す2つの公開Webサイト(foo.comとbar.com)があります。このハードウェアは、次のようにトラフィックをサーバーに転送します。

http: //foo.com==>ポート7700https
: //foo.com==>ポート7701

http: //bar.com==>ポート7800https
: //bar.com==>ポート7801

私のサーバーは現在、2つの仮想サーバー(7700、7701の場合はfoo.com、7800、7801の場合はbar.com)を定義する古いiPlanetボックスです。ロードバランサーはこれらのポートに直接転送するため、すべてが正常に機能します。

これらのWebサイトをApache2.2+ JBoss 6.0構成に移植する必要がありますが、現在、これを実現するためのベストプラクティスがわからなくなっています。

4つのポート(7700、7701、7800、7801)でリッスンするようにApacheをセットアップし、7701、7801のSSLを構成しました。ApacheにSSLハンドシェイクと接続を処理させることが望ましいと思います。次のように、Apacheで4つの仮想ホストエントリを設定しました。

<VirtualHost *:7700>
    DocumentRoot "/htdocs/foo.com"
    ServerName foo.com
</VirtualHost>
<VirtualHost *:7701>
    DocumentRoot "/htdocs/foo.com"
    ServerName foo.com
    SSLEngine on
    SSLCipherSuite ALL:...
    SSLCertificateFile "/cert/foo.com.crt"
    SSLCertificateKeyFile "/cert/foo.com.key"
</VirtualHost>

<VirtualHost *:7800>
    DocumentRoot "/htdocs/bar.com"
    ServerName bar.com
</VirtualHost>
<VirtualHost *:7801>
    DocumentRoot "/htdocs/bar.com"
    ServerName bar.com
    SSLEngine on
    SSLCipherSuite ALL:...
    SSLCertificateFile "/cert/bar.com.crt"
    SSLCertificateKeyFile "/cert/bar.com.key"
</VirtualHost>

これを静的コンテンツでテストしましたが、HTTP接続とHTTPS接続の両方が正しく機能しています。

私のJBoss設定では、現在、アプリケーションを/fooおよび/barとしてデプロイしていますが、それが最終的な設定であるかどうかはわかりません。私が達成したいのはこれです:

すべてのトラフィックを7700/7701からhttp:// localhost:8080 / fooに転送し、7800/7801からhttp:// localhost:8080/barに転送します。パブリックURLに/fooと/barを表示したくありませんが、ユーザーはhttp://www.foo.comhttp://www.bar.comを表示する必要があります。

リクエストを特定のURLに転送するようにmod_jkを設定する方法はありますか?または、JBossホストfoo.comをポートAに、bar.comをポートBに設定し、mod_jkを各ポートに個別に転送する方法を検討する必要がありますか?

4

1 に答える 1

0

mod_jkURL書き換えと組み合わせると、必要なものを処理できると思います。ワーカーに関するmod_jk情報は、mod_jkを使用して、uriworkermapを使用してURLに基​​づいてリクエストを転送できるようにする必要があることを示しています。また、仮想ホストごとに個別のuriworkermapを作成できることにも言及しています。

また、ご覧になることをお勧めしますmod_cluster。これには、これに役立つ追加機能がある可能性があります。

編集

ああ。あなたの説明(そしていくつかのより良い掘り下げ)の後、私は別の答えがあるかもしれないと思います。現在、ProxyPass/ProxyPassReverseを使用してトップレベルのURLを個々のサーブレットにリダイレクトしています。Apache VirtualHostのドキュメントをもう一度確認しましたが、これをと組み合わせるとmod_proxy、必要なものを入手できると思います。

これが私が持っているものに基づいてあなたの仕様を満たすことができる提案された構成例です:

Listen 7700
Listen 7701
Listen 7800
Listen 7801

<VirtualHost *:7700>
  ProxyPreserveHost On
  ProxyPass / http://localhost:8080/foo
  ProxyPassReverse / http://localhost:8080/foo
  ServerName foo.com
</VirtualHost> 

<VirtualHost *:7701>
  ProxyPreserveHost On
  ProxyPass / http://localhost:8080/foo
  ProxyPassReverse / http://localhost:8080/foo
  ServerName foo.com
  SSLEngine on
  SSLCipherSuite ALL:...
  SSLCertificateFile "/cert/foo.com.crt"
  SSLCertificateKeyFile "/cert/foo.com.key"
</VirtualHost> 

<VirtualHost *:7800>
  ProxyPreserveHost On
  ProxyPass / http://localhost:8080/foo
  ProxyPassReverse / http://localhost:8080/foo
  ServerName bar.com
</VirtualHost> 

<VirtualHost *:7801>
  ProxyPreserveHost On
  ProxyPass / http://localhost:8080/foo
  ProxyPassReverse / http://localhost:8080/foo
  ServerName bar.com
  SSLEngine on
  SSLCipherSuite ALL:...
  SSLCertificateFile "/cert/bar.com.crt"
  SSLCertificateKeyFile "/cert/bar.com.key"
</VirtualHost> 

初めてこれを見逃してしまったことをお詫びします。テストする必要があるのは、サーブレットアクセスのURLが正しいことを確認することだけです。私が使用しているパターンはですhttp://{host}:{port}/{WARName}/{ServletPath}。静的コンテンツを使用して構成をすでにテストしている場合は、プロキシ設定のみを追加/調整する必要があります。Listenステートメントが必要かどうかはわかりません。あなたのポートは非​​標準なので、あなたはそうするだろうと思います。

于 2010-09-08T02:11:24.277 に答える