1

ポート 7001 でベース URL /app1/ を使用して Weblogic アプリケーション App1 を実行するサーバー serverA と、ポート 8001 でベース URL /app2/ を使用して Weblogic アプリケーション App2 を実行する別のサーバー serverB があります。両方のサーバーで Solaris、Apache2、および Weblogic を実行します。 9.2

(詳細は変更されていますが、代表的なものです)

つまり、app1 は次の場所でアクセスできます。

http://serverA:7001/app1/

と app2 オン

http://serverB:8001/app2/

ただし、お客様は、アプリケーションへのすべてのアクセスで、server1 へのポート 443 で https を使用する必要があります。

アプリケーションが 1 つしかない場合は、仮想ホストを使用して、/app1/ で始まる URL のハンドラーを Weblogic プロキシに設定し、ポート 7001 でサーバー 1 に転送します。

2 つのアプリでは、/app2/ に一致し、ポート 8001 で現在のサーバーに転送する別の Location ステートメントを持つ別の仮想ホストが必要になります...しかし、最初の仮想ホストが SSL を実行するため、これがどのように機能するかわかりませんURL を決定するためのネゴシエーションであり、物事が 2 番目の仮想サーバーに落ちた場合、Apache はおそらくそれを行うことができません。

では、どうすればこれを処理できますか?

私の現在の考えは、ポート 80 で server1 に到着するすべての SSL リクエストを同じサーバー server1 にプロキシし (基本的には SSL ターミネーションを行うだけです)、上記の方法で /app1/ および /app2/ URL に 2 つの仮想ホストを追加することです。 .

これはうまくいきますか?これを行う他の方法について明らかなことを見逃していませんか?

編集: Weblogic プラグインには、それぞれページを異なる場所に向けるいくつかのブロックを含めることができることを見逃していると思います。その場合、これは簡単になります。

明日仕事に戻ったらテストし、質問を更新します

4

2 に答える 2

2

まず、このための必読のリソースはもちろん公式ドキュメントです:Apache HTTPサーバープラグインのインストールと構成( WLS 9プラグインに関するその他のリンクについては、この前の回答も参照してください)。

「 ApacheHTTPサーバープラグインの構成」のセクションで詳しく説明しているように、IfModuleアプリケーションごとに1つずつ(クラスター化されているかどうかに関係なく)、実際にはいくつかVirtualHost(含めることができます)を定義しますIfModuleドキュメントに例があります:

# VirtualHost1 = localhost:80
<VirtualHost 127.0.0.1:80>
  DocumentRoot "C:/test/VirtualHost1"
  ServerName localhost:80 <IfModule mod_weblogic.c> 
  #... WLS parameter ...
  WebLogicCluster localhost:7101,localhost:7201
  # Example: MatchExpression *.jsp <some additional parameter>
  MatchExpression *.jsp PathPrepend=/test2
  </IfModule>
</VirtualHost>

# VirtualHost2 = 127.0.0.2:80
<VirtualHost 127.0.0.2:80>
  DocumentRoot "C:/test/VirtualHost1"
  ServerName 127.0.0.2:80
  <IfModule mod_weblogic.c> 
  #... WLS parameter ...
  WebLogicCluster localhost:7101,localhost:7201
  # Example: MatchExpression *.jsp <some additional parameter>
  MatchExpression *.jsp PathPrepend=/test2
  #... WLS parameter ...
  </IfModule>
</VirtualHost>    <IfModule mod_weblogic.c>

これは複数のIPベースの仮想ホスト構成であることに注意してください(ドキュメントに記載されている名前ベースではありません)。しかし、これは実際には良いことです。名前ベースの仮想ホストを使用できないため、SSLを使用するときにこれがまさに必要なものだからです。引用名前ベース/非IPベースの仮想ホストでSSLを使用できないのはなぜですか?ApacheのSSL/TLS強力暗号化から:FAQ

その理由は非常に技術的で、やや「鶏が先か卵が先か」の問題です。SSLプロトコルレイヤーはHTTPプロトコルレイヤーの下にとどまり、HTTPをカプセル化します。SSL接続(HTTPS)が確立されると、Apache/mod_sslはSSLプロトコルパラメータをクライアントとネゴシエートする必要があります。このため、mod_sslは仮想サーバーの構成を参照する必要があります(たとえば、暗号スイート、サーバー証明書などを探す必要があります)。ただし、正しい仮想サーバーに移動するには、ApacheはHostHTTPヘッダーフィールドを認識している必要があります。これを行うには、HTTPリクエストヘッダーを読み取る必要があります。これはSSLハンドシェイクが終了する前に行うことはできませんが、SSLハンドシェイクフェーズを完了するために情報が必要です。ビンゴ!

したがって、上記のサンプルでは、​​仮想ホストのIPアドレスとポートを変更し、ServerNameニーズに合わせてIfModuleを調整し(そしてIPを指すようにDNSエントリを設定し)、そこに進みます。

于 2010-01-19T22:59:50.580 に答える
1

私は weblogic の経験がないので、何か重要なことを見逃しているかもしれません。しかし、これは apache のリバース プロキシ機能の単純なアプリケーションのように思えます。https を提供する apache インスタンスをセットアップし、次のように 2 つの場所を構成します。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<Location /app1>
    ProxyPass http://serverA:7001/app1
    ProxyPassReverse http://serverA:7001/app1
</Location>
<Location /app2>
    ProxyPass http://serverB:8001/app2
    ProxyPassReverse http://serverB:8001/app2
</Location>
于 2010-01-19T19:14:24.403 に答える