【问题标题】:How to use apache httpd as front for other web servers?如何使用 apache httpd 作为其他 Web 服务器的前端?
【发布时间】:2021-05-23 09:26:32
【问题描述】:

我想做什么

我想运行 Apache httpd (2.4.x) 作为 Apache tomcat (9.0.x) 和 Elasticsearch 服务器的前端。

例如,用户应该看到

http://localhost/tomcat/

内部转发到

http://localhost:8080/

例如

http://localhost/tomcat/manager/status(外部由 httpd 服务)

检索自

http://localhost:8080/manager/status(内部来自Tomcat)

我做了什么

mod_proxy、mod_proxy_http、mod_rewrite 被激活。

在 httpd.conf 我添加了

ProxyPass /tomcat http://localhost:8080
ProxyPassReverse /tomcat http://localhost:8080

或者

<Location "/tomcat">
    ProxyPass http://localhost:8080/
    ProxyPassReverse http://localhost:8080/
</Location>

什么不工作

http://localhost/tomcat/ 正确地提供预期的页面。但是,该页面上的链接不会调整为新的基本 URL。

例如,页面包含 &lt;a href="/docs/"&gt;Documentation&lt;/a&gt;

单击该链接转到 应该去http://localhost/tomcat/docs 但指向http://localhost/docs

请注意,如果可能,我想在 Apache httpd 端使用解决方案(而不是重新配置 Tomcat),因为稍后我想对 Elasticsearch 后端使用相同的机制。

另一个小问题

省略尾部斜杠时 http://localhost/tomcat 转发适用于 HTML 页面本身,但对于嵌入式资源失败,例如,Tomcat 徽标应检索为 http://localhost/tomcat/tomcat.svg -> http://localhost:8080/tomcat.svg 而是指向 http://localhost/tomcat.svg 未翻译,因为它不再匹配位置模式。

【问题讨论】:

    标签: apache tomcat mod-rewrite mod-proxy


    【解决方案1】:

    但是,该页面上的链接未调整为新的基本 URL。

    这是您配置中的主要问题:Web 应用程序通常会生成像 /manager/images/tomcat.svg 这样的绝对 URI 路径,而不是像 images/tomcat.svg 这样的相对 URI 路径。它们使用HttpServletRequest#getContextPath 检索部署它们的路径(/manager)。他们无法知道他们是从另一条路径代理的。

    这就是为什么 Web 应用程序的原始 URL 和代理 URL 应该保持相同的 URI 路径的原因。在您的情况下,您应该在 /tomcat/manager 部署 Tomcat 管理器。这可以通过多种方式完成:

    • 如果您的 Tomcat 管理器应用程序位于 &lt;Host&gt;应用程序库 ($CATALINA_BASE/webapps) 中,请将目录重命名为 tomcat#manager(这通常发生在 Windows 上),
    • 如果您的 Tomcat 的管理器应用程序在 &lt;Host&gt;应用程序库 之外,请将上下文文件(在 $CATALINA_BASE/conf/Catalina/&lt;host_name&gt; 中)从 manager.xml 重命名为 tomcat#manager.xml(这发生在 Linux Debian 等发行版),
    • 如果您在server.xml 中定义应用程序上下文(不推荐),您可以使用&lt;Context&gt; 元素的path 属性。

    数字符号# 将转换为/

    在 Apache 方面,将 ProxyPass 指令更改为:

    ProxyPass /tomcat http://localhost:8080/tomcat
    

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 2017-12-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-05
      相关资源
      最近更新 更多