6

遵循引擎场文档https://support.cloud.engineyard.com/entries/21715452-use-elastic-load-balancing-with-engine-yard-cloud

得到这个设置并且看起来运行良好,允许我们在 ELB 而不是在服务器上使用 SSL Terminated。从理论上讲,这应该允许我们在单个环境中使用多个 SSL 证书。

此设置意味着浏览器和 ELB 负载均衡器之间的流量是 SSL,但从 ELB 到应用程序服务器的前向流量是解密的。这导致我们的 rails 3.2.8 应用程序强制 SSL 出现问题 - 它将每个解密的请求重定向回它的 https 等价物,这会将解密的请求从负载均衡器再次发送到应用程序服务器,从而导致无限循环条件。

如果我们在我们的应用程序中禁用 SSL 的强制,我们需要测试每个请求以查看它是否来自 SSL 连接,如果是,我们可以响应,如果不是,则重定向它。

根据此发行说明 ( http://aws.amazon.com/releasenotes/7778622769836370 ),当流量从 https 连接传递时,ELB 将传递包含“https”的 X-Forwarded-Proto 标头。

首先,Engine Yard 上的请求中没有名为“X-Forwarded-Proto”的标头。“HTTP_X-FORWARDED_PROTO”确实存在,但即使流量通过 SSL 发送到 ELB,它也始终包含“http”。

任何人都可以提供对此的任何见解或解决方法的想法吗?到目前为止,我已经尝试过安永支持,但运气不佳。

4

1 回答 1

4

您可以检查 X-Forwarded-Port 标头,如果请求通过 ssl 到达负载均衡器,则该标头为 443。那将HTTP_X_FORWARDED_PORT在机架环境中。

我们在 Engine Yard Rails 应用程序中使用这个修改后的 rack-ssl gem 作为解决方法。

于 2012-12-06T19:59:32.733 回答