这是我的用例。
我想根据 HTTP 请求中使用的主机名使用 JBoss 7 来服务 2 个不同的 webapps (war):
- 当我访问https://app1.mydomain.com/时,JBoss 必须
app1.war
使用 SSL 证书“app1.mydomain.com” - 当我访问https://app2.mydomain.com/时,JBoss 必须
app2.war
使用 SSL 证书“app2.mydomain.com”
我希望将其appX.war
用作每个主机名的根上下文(访问https://appX.mydomain.com/index.html将使用该appX.war/index.html
文件),但我可以接受访问https://appX.mydomain.com /appX/访问我的appX
(X
是1
或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"/>
...
但这似乎没有按预期工作......
- 当我访问https://app1.mydomain.com/时,我看到了我的欢迎文件
app1.war
(我认为这是由于default-virtual-server
属性) - 当我访问https://app1.mydomain.com/app1/时,我看到了 404 报告(带有 HTML 正文内容)
- 当我访问https://app1.mydomain.com/app2/时,我看到了我的欢迎文件
app2.war
- 当我访问https://app2.mydomain.com/、https://app2.mydomain.com/app1/或https://app2.mydomain.com/app2/时,JBoss 只回答 HTTP “404 Not Found” " 没有任何正文 HTML 内容,所以我的页面是空白的。
有人有想法吗?
(我也在JBoss 用户论坛上发布了这个问题)