BigIP 负载平衡 Rails 3 / Apache 应用程序无法正确处理选择性 SSL?

BigIP 负载平衡 Rails 3 / Apache 应用程序无法正确处理选择性 SSL?

设置如下。我将一个 Rails 3 应用程序部署到两台服务器上,两台服务器都运行 Apache2,都具有相同的 VirtualHost 配置,都运行在 Passenger 上。Rails 应用程序中有一些路由要求通过 SSL 进行请求,因此我根据:protocol => 'https需要定义了这些路由。

这两台服务器是我们 BigIP 负载平衡器上的负载平衡池的一部分,其中一个配置文件设置为处理端口 80 流量,另一个配置文件设置为处理端口 443 流量。我们购买了一个证书并将其加载到 BigIP 盒中,并为分配给 :443 配置文件的证书设置了一个配置文件。

我在每个服务器上的 Apache 配置都以相同的方式定义ServerNameDocumentRootSetEnv对于我的 Rails 环境),以及声明中的所有内容<VirtualHost *:80 *:443> (请注意,在处理这些文件时,删除该*:443位绝对不会改变任何东西)。那里没有什么特别的。

当通过端口 80 浏览此网站时,流量可以顺利通过并到达 Rails 应用程序。当浏览需要 HTTPS 的登录页面时,浏览器将停留在那里并尝试联系该页面。最终我的浏览器给了我一个服务器意外断开连接错误。

我的问题是:BigIP 如何将 SSL 流量发送到其池中的服务器,Apache 又该如何识别这一点?我的 Apache 日志中甚至没有记录流量到达两个后端服务器的情况。我需要在某个地方修改 Passenger 配置以允许此流量吗?

如果还需要比我已发布内容更多的信息,请告诉我,我会将其附加到这个问题中。看来我对这类事情比我想象的还要生疏!

另外;由于我对这些东西真的很愚蠢,有什么好的资源可以帮助我了解 Web 服务器如何处理 SSL 请求?

答案1

如果您已在 F5 LTM 上加载证书并将其与监听端口 443 的虚拟服务器关联,则 F5 将终止 SSL 并将 HTTP 流量传递到池。Apache 不会看到 SSL 流量,只会看到 https 的“http”部分。您可以使用与端口 80 流量相同的池。

听起来好像您的证书没有在 F5 中正确加载,或者 SSL 配置文件未与您的 443 虚拟服务器关联。

答案2

我的答案与ERR0的类似......

如果您有私有 VLAN,那么您的 HTTP 服务器实际上没有必要监听 443。相反,您的应用程序应该支持反向代理,并将某些页面(例如 /login)重定向到该页面的 SSL/HTTPS 版本。

阅读 X-Forwarded-For 和 X-Forwarded-Proto HTTP 标头。

我不熟悉 Rails,但也许有一个模块可以为您做到这一点?即允许您指定哪些页面应重定向到 SSL/HTTPS 版本。

干杯

相关内容