2

这是我的用例。

我想根据 HTTP 请求中使用的主机名使用 JBoss 7 来服务 2 个不同的 webapps (war):

我希望将其appX.war用作每个主机名的根上下文(访问https://appX.mydomain.com/index.html将使用该appX.war/index.html文件),但我可以接受访问https://appX.mydomain.com /appX/访问我的appXX12)。

此外,我想为该配置使用单个 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

我相信你有两个选择。

选项 1:使用 JBoss 虚拟主机

为此,您必须将虚拟主机条目添加到 Web 子服务。你在做什么。

我认为您错过的部分是在您的网络应用程序中为您的文件添加<virtual-host>标签。jboss-web.xml

请参考以下链接以获取有关使用 JBoss AS7设置虚拟主机的快速说明 。

选项 2:使用 Apache

这将是我更喜欢的方法,尤其是对于生产用例。您将 Apache 作为您的 Web 服务器,并让它代理传入的请求到 JBoss。Apache 还将处理 SSL。

例如,您可以通过 mod_jk 执行此操作,它是一个负载均衡器。mod_jk 通过 AJP 连接器将流量定向到您的应用程序,该连接器应该可以使用 JBoss 中的 HA 配置文件获得。

由于您使用的是 mod_jk 和 HA 配置文件,因此您可以继续对您的应用程序进行集群化,并根据需要对这些集群进行负载平衡。

如果您有任何其他问题,请告诉我。

于 2012-12-18T17:31:46.407 回答
0

最后,似乎直接使用 JBoss 7 是不可能的,我使用了 Apache HTTPD,我的应用程序的非 root 上下文和多个 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,只需复制此配置并替换app1app2和。IP1IP2

于 2013-01-02T09:44:59.007 回答