由于以下原因,我需要以菊花链形式连接两个 Apache 服务器。
服务器端应用程序被编译为 CGI 模块。它需要与位于防火墙后面的安全区域中的数据库一起工作。这要求应用程序也位于安全区域中。作为解决方案,我们正在考虑设置两个菊花链式 Apache 服务器:一个位于 DMZ(A),另一个位于防火墙后面(B)。CGI 应用程序将成为位于安全区域中的 Apache 服务器 B 的一部分。
服务器配置/流量路由设想如下:
- 服务器 A 将位于 DMZ 中。它将是传入客户端请求的第一个联系点。它也将是向客户端发出响应的最后一个点。此服务器上已启用 SSL(https)。
- 当服务器 A 收到请求(通过 HTTPS)时,它将检查查询字符串,并针对某些模式将请求转发到位于防火墙后面安全区域中的 Apache 服务器 B。注意:服务器 A 也是其他一些互联网应用程序的“前端”,其中一些应用程序在安全区域中的 Tomcat 上运行(它们使用 mod_jk 将请求转发给它们)。
- 服务器 B 将请求负载移交给 CGI 应用程序,后者将处理请求并将响应传回其 Apache 服务器(即服务器 B)。然后,服务器 B 将响应传回服务器 A,服务器 A 再将其发送回客户端。这就像通过 mod_jk 进行通信的 Apache 和 Tomcat 服务器之间的流量移动一样。
几个问题:
- 两个 Web 服务器可以像我所描述的那样以菊花链形式连接吗?就像 Apache 可以使用 mod_jk 与 Tomcat 进行“菊花链”一样。
- 服务器 A 将启用 SSL(HTTPS)。服务器 B 是否也需要启用 SSL?
- 假设菊花链是可行的,当服务器 A 通过 HTTPS 将收到的请求转发到服务器 B 时,该请求是以 HTTPS 还是纯 HTTP 的形式传输到服务器 B?或者,这是我们可以控制的吗?如何控制?
答案1
是的,您可以菊花链式连接网络服务器。实际上,这就是代理服务器。(实际上是反向代理 - 您需要谷歌搜索才能了解更多相关信息)。
不,服务器 B 不需要启用 SSL。您可以使用 mod_proxy (apache) 或同等工具来剥离 SSL。这在负载平衡/共享环境中非常常见。(我恰好维护了其中几个!)
在我的设置中,它通常以 HTTP 形式传输。我想如果你使用 squid(代理/反向代理),你可以让它使用 HTTPS - 我没有尝试过,但看起来 Apache 也可以这样做。看看http://httpd.apache.org/docs/2.2/mod/mod_proxy.html并在页面上搜索“https://后端“