2

これが私のユースケースです。

HTTPSリクエスト内で使用されるホスト名に応じて、JBoss 7を使用して2つの異なるWebアプリケーション(war)を提供したいと思います。

  • https://app1.mydomain.com/にアクセスするとき、JBossapp1.warはSSL証明書「app1.mydomain.com」でサービスを提供する必要があります
  • https://app2.mydomain.com/にアクセスするとき、JBossapp2.warはSSL証明書「app2.mydomain.com」でサービスを提供する必要があります

appX.war各ホスト名のルートコンテキストとしてを使用することをお勧めします(https://appX.mydomain.com/index.htmlにアクセスするとファイル使用されます)が、 httpsappX.war/index.html ://appX.mydomain.comにアクセスすることを受け入れることができます。 / appX /を使用してmy appXXis1または2)にアクセスします。

さらに、その構成に単一のIPとポートを使用したいのですが、Appache HTTPDをプロキシとして使用しないと、これは不可能のようです(SOの回答とJBossフォーラムスレッドによる) 。それは代替案ですが、私はそれを使用したくないと思います。

私はそれをstandaloneモードで(そして別のIPを使用して)構成しようとしました。これが私の抜粋ですstandalone.xml

...
    <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="app1.mydomain.com" native="true">
        <connector name="https-app1" protocol="HTTP/1.1" scheme="https" socket-binding="app1-https" secure="true">
            <ssl password="pass1" certificate-key-file="${jboss.server.config.dir}/cert/app1.mydomain.com.key" protocol="TLSv1" verify-client="false" certificate-file="${jboss.server.config.dir}/cert/app1.mydomain.com.crt"/>
        </connector>
        <connector name="https-app2" protocol="HTTP/1.1" scheme="https" socket-binding="app2-https" secure="true">
            <ssl password="pass2" certificate-key-file="${jboss.server.config.dir}/cert/app2.mydomain.com.key" protocol="TLSv1" verify-client="false" certificate-file="${jboss.server.config.dir}/cert/app2.mydomain.com.crt"/>
        </connector>
        <virtual-server name="app1.mydomain.com" enable-welcome-root="false" default-web-module="app1">
            <alias name="app1.mydomain.com"/>
        </virtual-server>
        <virtual-server name="app2.mydomain.com" enable-welcome-root="false" default-web-module="app2">
            <alias name="app2.mydomain.com"/>
        </virtual-server>
...
<interfaces>
    <interface name="app1.mydomain.com">
        <inet-address value="10.0.0.1"/>
    </interface>
    <interface name="app2.mydomain.com">
        <inet-address value="10.0.0.2"/>
    </interface>
...
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
    <socket-binding name="app1-https" interface="app1.mydomain.com" port="443" fixed-port="true"/>
    <socket-binding name="app2-https" interface="app2.mydomain.com" port="443" fixed-port="true"/>
...

しかし、それは期待どおりに機能していないようです...

誰かアイデアがありますか?

(その質問はJBossユーザーフォーラムにも投稿しました)

4

2 に答える 2

1

2つの選択肢があると思います。

オプション1:JBoss仮想ホストの使用

これを行うには、仮想ホストエントリをWebサブサービスに追加する必要があります。あなたがやっていたこと。

あなたが見逃した部分は、Webアプリ内のファイルに<virtual-host>タグを追加することだったと思います。jboss-web.xml

JBoss AS7を使用して仮想ホストを設定する簡単な手順については、次のリンクを参照してください 。

オプション2:Apacheを使用する

これは、特に本番ユースケースの場合に私が好む方法です。ApacheをWebサーバーとし、着信リクエストをJBossにプロキシします。ApacheもSSLを処理します。

たとえば、ロードバランサーであるmod_jkを介してこれを行うことができます。mod_jkは、AJPコネクタを介してトラフィックをアプリケーションに転送します。AJPコネクタは、JBossのHAプロファイルを使用して利用できる必要があります。

mod_jkプロファイルとHAプロファイルを使用しているため、必要に応じて、アプリケーションをクラスター化し、それらのクラスターの負荷を分散することができます。

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2012-12-18T17:31:46.407 に答える
0

最後に、JBoss 7を直接使用することはできないように思われるため、Apache HTTPD、アプリの非ルートコンテキスト、および複数のIP(最悪の場合)を使用しました。

...
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
...
Listen 80
Listen 443
...

<VirtualHost IP1:80>
    DocumentRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"
    ServerName app1.mydomain.com:80
    ServerAlias www.app1.mydomain.com
    ServerAdmin admin@mydomain.com
    ErrorLog "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/app1.mydomain.com-error.log"
    TransferLog "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/app1.mydomain.com-access.log"

    RewriteEngine On
    RewriteRule ^/(.*)$ https://app1.mydomain.com/$1 [R]
</VirtualHost>

<VirtualHost IP1:443>

    #   General setup for the virtual host
    DocumentRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"
    ServerName app1.mydomain.com:443
    ServerAlias www.app1.mydomain.com
    ServerAdmin admin@mydomain.com
    ErrorLog "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/app1.mydomain.com-error.log"
    TransferLog "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/app1.mydomain.com-access.log"

    ProxyPass /app1 ajp://localhost:8009/app1
    ProxyPassReverse /app1 https://app1.mydomain.com/app1

    RewriteEngine On    
    RewriteRule ^/$ /app1/ [R]

    #   SSL Engine Switch:
    #   Enable/Disable SSL for this virtual host.
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5  

    #   Server Certificate:
    SSLCertificateFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/conf/SSL/app1.mydomain.com.crt" 
    #   Server Private Key:
    SSLCertificateKeyFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/conf/SSL/app1.mydomain.com.key"
    #   Server Certificate Chain:
    SSLCertificateChainFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/conf/SSL/ca-root.crt"

    #   SSL Protocol Adjustments:
    BrowserMatch "MSIE [2-5]" \
             nokeepalive ssl-unclean-shutdown \
             downgrade-1.0 force-response-1.0

    #   Per-Server Logging:
    #   The home of a custom SSL log file. Use this when you want a
    #   compact non-error SSL logfile on a virtual host basis.
    CustomLog "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/app1.mydomain.com-ssl.log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>  

それはのためapp1です。

の場合app2は、この構成を複製して、およびに置き換えてapp1ください。app2IP1IP2

于 2013-01-02T09:44:59.007 に答える