首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将JBoss 7配置为为特定主机名提供不同的默认war (使用SSL)

如何将JBoss 7配置为为特定主机名提供不同的默认war (使用SSL)
EN

Stack Overflow用户
提问于 2012-12-18 10:16:18
回答 2查看 4K关注 0票数 2

这是我的用例。

我希望使用JBoss 7为两个不同的webapps (war)服务,具体取决于在HTTP请求中使用的主机名:

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

此外,我希望为该配置使用一个IP &端口,但如果不使用这样的回答 & 就是那个JBoss论坛上的那个帖子,这似乎是不可能的。这是另一种选择,但我宁愿不使用它。

我尝试用standalone模式(并使用不同的IP)来配置它。以下是我的standalone.xml的摘录:

代码语言:javascript
复制
...
    <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用户论坛提出这个问题)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-02 09:44:59

最后,似乎不可能直接使用JBoss 7,我使用了Apache、应用程序的非根上下文和多个IP(最糟糕的是我想要的):

代码语言:javascript
复制
...
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替换为app2,将IP1替换为IP2

票数 0
EN

Stack Overflow用户

发布于 2012-12-18 17:31:46

我相信你有两个选择。

选项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配置文件,您可以继续对应用程序进行集群化,并在您愿意的情况下对这些集群进行负载平衡。

如果你还有什么问题,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13930677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档