3

我需要在我的 Apache2+ JBoss7.1 环境中配置两个网站:www.foo.com 和 www.bar.net。

Apache 站点配置示例(它们彼此相似,除了站点名称):

<VirtualHost *:80>
        ServerAdmin     foo@bar.com
        ServerName      www.foo.com

        DocumentRoot /var/www/foo
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/foo>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SetEnvIf Request_URI "/photos/*" no-jk
        JkMount / ajp13
        JkMount /* ajp13

</VirtualHost>

在 JBoss Standalone.xml 我有:

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
            <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
            <connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp"/>
            <virtual-server name="default-host" enable-welcome-root="false" default-web-module="bar">
                <alias name="localhost"/>
                <alias name="www.bar.net"/>
            </virtual-server>
            <virtual-server name="foo" enable-welcome-root="false" default-web-module="foo">
                <alias name="www.foo.com"/>
            </virtual-server>
        </subsystem>

虽然两个应用程序都有 jboss-web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <security-domain>java:/jaas/foo</security-domain>
    <context-root>/</context-root>
</jboss-web>

部署 foo.war 会导致:

安装:无法处理部署“foo.war”的安装阶段

引起:org.jboss.msc.service.DuplicateServiceException:服务 jboss.web.deployment.default-host./.realm 已注册

什么是正确的配置?错误在哪里?

4

3 回答 3

2

我认为问题在于您为两个应用程序定义了相同的上下文根。您不能同时拥有两个具有相同上下文根的应用程序。一种可能的解决方案是为每个应用程序定义不同的上下文(分别为 /foo 和 /bar),并在每个 Apache 虚拟主机中使用 ProxyPass 指令。

<VirtualHost *:80>
        ServerAdmin     foo@bar.com
        ServerName      www.foo.com
        ...
        ProxyPass         /     http://yourjbossserver:port/foo/
        ProxyPassReverse  /     http://yourjbossserver:port/foo/
</VirtualHost *:80>

<VirtualHost *:80>
        ServerAdmin     foo@bar.com
        ServerName      www.bar.com
        ...
        ProxyPass         /     http://yourjbossserver:port/bar/
        ProxyPassReverse  /     http://yourjbossserver:port/bar/
</VirtualHost *:80>

这样您就可以直接通过以下地址访问您的应用程序:www.bar.com 和 www.foo.com。(请注意,如果您有一个 Apache 作为代理,并使用它自己的虚拟主机,则无需定义 JBoss 虚拟主机)。

一个简单但完整的例子是(在这种情况下,我已经配置了 jboss jmx-console,与 apache 在同一台机器上运行,可以从 www.foo.com 访问):

<VirtualHost *:80>
    ServerName www.foo.com
    ProxyPass         /     http://localhost:8080/jmx-console/
    ProxyPassReverse  /     http://localhost:8080/jmx-console/
</VirtualHost>

请注意,您需要在地址末尾添加反斜杠。

于 2013-02-04T11:26:30.567 回答
0

将 foo 添加到我的配置中就足够了,现在可以很好地与 mod_jk 一起使用。我写了一篇博客:http: //fabiobozzo.wordpress.com/2013/02/25/multiple-web-applications-with-jboss-and-apache/

于 2013-02-25T08:21:40.913 回答
0

实际上他的方式很好。如果他不想,就不需要使用代理。原始配置中缺少的部分是他从未在 jboss-web.xml 中提及该别名。

<jboss-web>
   <security-domain>java:/jaas/foo</security-domain>
   <context-root>/</context-root>
   <virtual-host>www.foo.com</virtual-host>
</jboss-web>

在第二个应用程序中

<jboss-web>
   <security-domain>java:/jaas/foo</security-domain>
   <context-root>/</context-root>
   <virtual-host>www.bar.net</virtual-host>
</jboss-web>

并摆脱那个 default-web-module 标签。你正在用那个烂摊子制造一个悖论。你要么去一个或另一个.. 不是两个。那是在您没有映射别名时使用的。

于 2013-07-29T12:39:29.697 回答