【问题标题】:Redirecting to multiple webapps in same Tomcat重定向到同一个 Tomcat 中的多个 webapp
【发布时间】:2015-06-25 09:45:48
【问题描述】:

我必须说我尝试了很多可能性,但我在 Apache WS 方面的知识并没有太高深。

Apache Web Server version: 2.2.22
OS: Centos 6 64 bits
Tomcat version: 7.0.57

我需要实现以下目标: 我有一些这样定义的普通网站:

<VirtualHost *:80>
        ServerAdmin example1@example1.com
        DocumentRoot "/opt/sites/example1/"
        ServerName example1.com
        ErrorLog logs/example1-error_log
        CustomLog logs/example1-access_log common
        RedirectMatch permanent ^/(.*) http://www.example1.com/$1
</VirtualHost>
<VirtualHost *:80>
        ServerAdmin example1@example1.com
        DocumentRoot "/opt/sites/example1/"
        ServerName www.example1.com
        ErrorLog logs/example1-error_log
        CustomLog logs/example1-access_log common
</VirtualHost>

我有一个带有多个 web 应用程序的 tomcat,每个应用程序都可以通过自己的上下文访问。 我必须从不同的域访问每个 Web 应用程序。例如,我有以下 webapps:wbExample1、wbExample2、wbExample3

应该可以这样访问:

www.example1.com/wbExample1
www.example2.com/wbExample2
www.example3.com/wbExample3

因此,为每个网站定义的域也必须访问特定的 webapp。

另外,我想知道 www.example1.com/wbExample1 是否可以通过 url www.example1.com/contact 访问而不显示名称webapp 的上下文并显示文本 contact 或 contact.html

非常感谢您的宝贵时间。

【问题讨论】:

    标签: apache tomcat


    【解决方案1】:

    你可以这样做。首先,您需要设置从 Apache WebServer 到 Apache Tomcat 的重定向。如何 sdo 可以找到here。只需删除“/blog* no-jk”行即可。

    您需要做的第二件事是创建虚拟主机:

    <VirtualHost *:80>
    

    将侦听所有域,在这种情况下,您可以保持这种方式。编辑 [Tomcat]/conf/server.xml 并为每个域添加虚拟主机,具有不同的名称和 appBases

    <Host name="example1.com" appBase="webapps-example1" unpackWARs="true" autoDeploy="true">
     ...
    </Host>
    

    在默认的“webapps”目录旁边创建目录:“webapps-example1”,...确保 Tomcat 可以访问它们。

    重新启动 Tomcat 并将您的应用程序部署为您的虚拟主机的 根上下文,即:[Tomcat]/webapps-example1/ROOT。您可以通过在部署之前将它们重命名为 ROOT.war 来做到这一点。这样,您无需额外的应用程序名称即可访问您的应用程序。

    【讨论】:

    • 我刚刚尝试了您的回答,但没有成功。结果是错误'jk_translate::mod_jk.c (3488): missing uri map for www.example1.com:/Servlet/index jk_map_to_storage::mod_jk.c (3647): missing uri map for www.example1.com: /Servlet/index'
    • 您是否在 定义中定义了映射(JKMount ...)? serverfault.com/questions/309563/…
    【解决方案2】:

    我尝试使用 mod proxy 而不是 mod jk。

    我刚刚这样定义了我的 VirtualHost(最后四行是新的):

    <VirtualHost *:80>
            ServerAdmin example1@example1.com
            DocumentRoot "/opt/sites/example1/"
            ServerName www.example1.com
            ErrorLog logs/example1-error_log
            CustomLog logs/example1-access_log common
           ProxyRequests off
           ProxyPreserveHost on
           ProxyPass /contact.html http://localhost:8081/Servlet/lmdd
           ProxyPassReverse /contact.html http://localhost:8081/Servlet/lmdd
    </VirtualHost>
    

    通过这个设置,它像我预期的那样工作,我可以访问我的 webapp 的索引页面,除非当我尝试提交页面时,它返回

    在此服务器上找不到请求的 URL /Servlet/sendFormLMDD。

    在 Tomcat 日志中没有日志,因为从未到达。

    在 Apache WS 日志中:

    访问日志 - “POST /Servlet/sendFormLMDD HTTP/1.1”404 192

    错误日志 - 文件不存在:/opt/sites/example1/Servlet,引用者:http://example1.com/contact.html

    失败的原因很清楚,就是试图在普通网站所在的路径中查找servlet,而不是在tomcat中。我该怎么做才能告诉 Apache 在 POST 请求中转到 tomcat?

    有关更多信息,这是表单定义:

    <form action="${pageContext.request.contextPath}/sendFormLMDD" method="post" id="updateForm" onsubmit="return validateForm()">
    

    ${pageContext.request.contextPath} 正在解析为 Servlet。

    感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 2018-01-29
      相关资源
      最近更新 更多