apache - JBoss 7 多根上下文 Web 应用程序

标签 apache jboss jboss7.x war

我需要在我的 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>

在 JBossstandalone.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”的安装阶段

Caused by: org.jboss.msc.service.DuplicateServiceException: Service jboss.web.deployment.default-host./.realm is already registered

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

最佳答案

我认为问题在于您为两个应用程序定义了相同的上下文根。您不能同时拥有两个具有相同上下文根的应用程序。一种可能的解决方案是为每个应用程序定义不同的上下文(分别为/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>

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

关于apache - JBoss 7 多根上下文 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14684069/

相关文章:

java - 为 JBoss AS 7 运行 Java 服务包装器时出错

java - 在 jBoss AS 中创建模块

php - 用于检索现场体育比分的 Cron 设置

java - org.jboss.msc.service.StartException 服务 jboss.web.deployment.default-host./: Failed to start service

java - jboss在哪里保存编译后的jsp文件的缓存servlet版本

jboss - Wildfly 和过程 Controller

java - JBoss 7.1.1 Final、Weld 和 Seam 3 上的 Hibernate Search

php - 通过 PHP 使用 Exchange 管理单元执行 powershell 脚本

apache - 当有人试图猜测我网站上的管理员目录时,我该如何 react ?

apache - 所有对 Restful web 服务的后请求都提供 Http 415