【问题标题】:How to override scheme and is_ssl in apache HTTP Server for mod_proxy_ajp如何在 apache HTTP Server 中为 mod_proxy_ajp 覆盖方案和 is_ssl
【发布时间】:2016-04-10 14:13:54
【问题描述】:

我们在负载均衡器(也可用作 SSL 终结器)和 Apache HTTP Server 2.4 后面运行 Tomcat 7。 Apache 通过mod_proxy_ajp 连接到Tomcat。

对于应用程序,重要的是 Tomcat 知道请求是通过 HTTPS 进入的,因此是安全的。例如this article 建议,通常使用属性secure="true" 和可能的scheme="https" proxyPort="443" 在Tomcat 的连接器上进行配置。虽然这可行,但由于我们也将 HTTP 用于某些目的,因此很不方便,因此我们需要为此目的设置两个 Tomcat 连接器。而且它有一种味道,因为这种方式基本上是告诉 Tomcat 覆盖它从 Apache HTTP 服务器获得的错误信息,即请求是 HTTPS 而不是 HTTP,而不是告诉 Apache 它应该发送有关协议和的正确信息安全状态。

所以我的问题是:是否有可能以某种方式配置 Apache HTTP 服务器本身,使其通过 AJP 协议传递正确的信息:请求是通过 HTTPS 接收的并且是安全的?问题是它不知道它是 HTTPS,因为它之前有一个 SSL 终止符,并且就它而言,请求是通过 HTTP 到达的。我可以告诉 Apache 它实际上是 HTTPS 吗?

【问题讨论】:

    标签: apache tomcat ajp mod-proxy-ajp


    【解决方案1】:

    我一直认为 AJP 会自动传输这些信息 - 但我没有使用 mod_proxy_ajp,而是使用 mod_jk。这是我更喜欢 AJP 而不是 HTTP(和代理)的原因之一。

    可能值得更改模块/连接

    【讨论】:

    • AJP 确实会自动传输此信息 - 但前提是 apache http 服务器知道它是 HTTPS。但是,如果在 apache 之前有一个 SSL 终止符,则它不知道它是 HTTPS,因为就它而言,请求是通过 HTTP 到达的。我怎么知道它真的是 HTTPS?就是这个问题。
    • 哎呀 - 抱歉,这是我错过的一个事实。我通常使用 Apache 作为 TLS 终结器。在这种背景下,很容易忽略它们在您的情况下是分开的。我会在这里留下我的答案,即使它不是你要找的。我唯一的想法(目前)确实是重复的连接器集,利用您在问题中已经提到的secure=true 属性。
    【解决方案2】:

    部分解决方案似乎是在Apache HTTP服务器的虚拟主机中to set the protocol on a ServerName directive

    ServerName https://whatever
    

    这样,重定向中的任何 Location: 标头似乎在 Apache 中都被重写为 https,但 Tomcat 仍然通过 AJP 传递了错误的信息。

    【讨论】:

      猜你喜欢
      • 2011-01-01
      • 1970-01-01
      • 2020-12-12
      • 2011-09-02
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      相关资源
      最近更新 更多