Apache2 代理保留域名

Apache2 代理保留域名

我正在尝试实施浏览器客户端 -> Apache2 代理 -> Tomcat 应用服务器方案。Apache2 和 Tomcat 位于不同的服务器上。但代理无法按我预期的方式工作。Apache2 虚拟主机设置:

  <VirtualHost *:80 *:443>
    ServerName example.com
    ServerAlias www.example.com

    ProxyPass /MyApp http://tomcatdomain.com/MyApp
    ProxyPassReverse /MyApp tomcatdomain.com/MyApp
  </VirtualHost>

如果我请求在浏览器中打开页面,http://example.com/MyApp,应用程序正确打开,但 URL 不同 -http://tomcatdomain.com/MyApp接下来,我查看了 Ajax 请求,发现它并没有按照我预期的方案运行:

 12:35:20.537 GET https://example.com/MyApp/service/test [HTTP/1.1 302  41ms]
 12:35:20.617 GET https://tomcatdomain.com/MyApp/service/test

预期:[请求] 客户端->apache2->tomcat [响应] tomcat->apache2->客户端

实际上是: [请求] 客户端->apache2 [响应] apache2->客户端 [请求2] 客户端 ->tomcat [响应2] tomcat -> 客户端

我的第一个问题是如何让客户端通过一个查询收到来自 tomkat 的响应?

ProxyPreserveHost 参数的下一个问题是 - 打开应用程序时我需要保留原始 url(example.com)(而不是 tomcatdomain.com)。我将 ProxyPreserveHost 附加到 appache2 设置:

<VirtualHost *:80 *:443>
    ServerName example.com
    ServerAlias www.example.com

    ProxyPreserveHost On

    ProxyPass /MyApp http://tomcatdomain.com/MyApp
    ProxyPassReverse /MyApp tomcatdomain.com/MyApp
</VirtualHost>

我还准备了tomkat server.xml:

   <Host name="example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <Alias>www.example.com</Alias>
    <Context path="" docBase="MyApp"/>
   </Host>

我发出一个请求并在浏览器中看到以下内容:

该页面未正确重定向 Firefox 检测到服务器正在以永远无法完成的方式重定向此地址的请求。

我发出 AJAX 请求,但看到 22 个相同的请求没有得到答复:

 12:54:48.020 GET https://example.com/MyApp/service/test [HTTP/1.1 302  28ms]
 12:54:48.042 GET https://example.com/MyApp/service/test [HTTP/1.1 302  4ms]
 ... 22 requests!
 12:54:48.367 GET https://example.com/MyApp/service/test [HTTP/1.1 302  3ms]

我得出的结论是请求没有重定向到tomcat服务器。

为了证实我的猜测,我修正了 Apache2 设置:

  <VirtualHost *:80 *:443>
    ServerName example.com
    ServerAlias www.example.com

    ProxyPreserveHost On

    ProxyPass /MyApp http://tomcatdomain.com/MyApp**ABCD**
    ProxyPassReverse /MyApp tomcatdomain.com/MyApp**ABCD**
  </VirtualHost>

在浏览器中我看到:未找到请求的 URL /MyAppABCD 未在此服务器上找到。Apache/2.4.27 (Ubuntu) 服务器位于 example.com 端口 80

Apache2搜索URL映射不是在tomcat上,而是在同一个apache2上?

请告诉我,如何实现该方案,当浏览器打开页面时,将通过 Apache2 代理从 Tomcat 接收数据,并保存原始 URL?谢谢。

答案1

问题出在 Apache2 和 Tomcat 上的自签名证书上。需要进行交叉认证。如果您删除 Apache2 和 Tomcat(不是!WWW 和 Apache2)之间的加密(SSL 或 TLS),则无需进行其他设置。

相关内容