【问题标题】:Tomcat serving URLs wrong with mod_proxy and apacheTomcat 使用 mod_proxy 和 apache 提供 URL 错误
【发布时间】:2011-01-07 04:31:44
【问题描述】:

我已经使用 apache 设置了一个主机来提供静态页面并使用 Tomcat 来提供我的 Web 应用程序(请参阅 this question)。静态页面来自服务器

http://myhost.com

动态(tomcat)页面来自服务器

http://myhost.com/myapp

mod_proxy 确保“http://myhost.com/myapp”被转发到在“http://myhost.com:8080”上运行的 tomcat 服务器。

问题是现在您在“http://myhost.com/myapp”上获得标准的 Tomcat 介绍页面,但是如果您单击左侧的本地链接(例如“状态”),它会生成一个 URL “http://myhost.com/manager/status”而它应该生成:“http://myhost.com/myapp/manager/status”

(tomcat下安装的webapp也是如此)

应该在我的配置(apache、tomcat?)中进行哪些更改以将我的 tomcat 链接重定向到正确的位置?

【问题讨论】:

    标签: apache tomcat url-routing reverse-proxy mod-proxy


    【解决方案1】:

    您是否在 httpd.conf 中设置了 ProxyPassReverse 设置。这将覆盖 HTTP 标头,您将在 tomcat 一侧获得正确的请求。

    【讨论】:

    • 我做了以下操作: ProxyPass /myapp localhost:8080 ProxyPassReverse /myapp localhost:8080 但它不适用于 TOMCAT 根文件夹。我设法做的(因为我只需要从 myhost.com/mywebapp 引用我的 Web 应用程序)是使用以下 ProxyPass 命令: ProxyPass /mywebapp localhost:8080/mywebapp ProxyPassReverse /mywebapp localhost:8080/mywebapp 这最终帮助我解决了我的实际问题.但是,为什么 tomcat 仍然引用错误的内容对我来说仍然是一个谜。
    • 恕我直言,您必须将 编辑为 mywebapp。链接是由您的 tomcat 生成的,如果它们不像 myhost.com/myapp/manager/status 它们会失败。
    • 你知道你把 default-uri 放在哪里了吗?
    • 这个信息页可能会有所帮助:它是关于 url 模式和设置它们 -> www2.roguewave.com/support/docs/leif/leif/html/bobcatug/…
    【解决方案2】:

    您的网址映射自:

    http://myhost.com/myapp -> http://myhost.com:8080

    这意味着访问上面的 URL 将被映射到 Tomcat 中的 ROOT 应用程序。 ROOT 应用程序将生成包含来自 Tomcat 根上下文的链接的页面。

    换句话说,如果你去:

    http://myhost.com:8080

    您将获得一个包含指向

    的链接的页面

    http://myhost.com:8080/manager/status

    此链接有效。但是,当该页面返回给通过 Apache 请求它的浏览器时,完整的 URL 看起来像:http://myhost.com/manager/status

    我假设您打算将一个名为“myapp”的应用程序部署到 Tomcat?如果是这种情况,这个应用程序的 Tomcat URL 将是

    http://myhost.com:8080/myapp

    通过 Apache 访问时也可以正确映射。

    如果您绝对必须以这种方式访问​​ Tomcat 根应用程序,则必须重写它在返回页面中输出的 URL。

    【讨论】:

    • 其实在这个设置中myapp现在指的是tomcat ROOT,没问题。所以一个webapp应该在myhost.com/myapp/webapp下。
    【解决方案3】:

    我在mod_proxy_ajp 上取得了最大的成功。它需要 mod_proxy,但可以通过 ajp 工作。改用它,你的 conf 文件看起来很相似

        ProxyPass / ajp://localhost:8009/
    

    查看我的similar question 以及this question 的答案。我发现 mod_proxy_ajp 中的唯一错误是,如果我需要重新启动 tomcat,我也必须强制重新启动 apache。

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 2010-10-31
      • 2013-07-11
      • 2013-05-27
      • 2010-10-14
      • 2013-10-12
      • 2017-03-27
      • 2012-10-05
      • 1970-01-01
      相关资源
      最近更新 更多