【问题标题】:Engine Yard Rails app - Terminating SSL at an Elastic Load Balancer (ELB) and passing X-Forwarded-Proto http headerEngine Yard Rails 应用程序 - 在弹性负载均衡器 (ELB) 处终止 SSL 并传递 X-Forwarded-Proto http 标头
【发布时间】:2023-03-18 19:06:01
【问题描述】:

https://support.cloud.engineyard.com/entries/21715452-use-elastic-load-balancing-with-engine-yard-cloud 关注 Engine Yard 文档

得到这个设置并且看起来运行良好,允许我们在 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”确实存在,但它始终包含“http”,即使流量通过 SSL 发送到 ELB。

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

【问题讨论】:

  • 如果您联系 EngineYard,他们可以为您的应用启用 stunnel 功能标志,这将使 x-proto-forward 保持在原位而不是将其剥离。

标签: ruby-on-rails ssl amazon-web-services http-headers engineyard


【解决方案1】:

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

我们在 Engine Yard Rails 应用中使用 this modified rack-ssl gem 作为解决方法。

【讨论】:

  • 错字:HTTP_X_FORWARDED_PORT
猜你喜欢
  • 2013-10-03
  • 2018-02-21
  • 2014-02-21
  • 2021-10-18
  • 2014-08-22
  • 2011-08-10
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
相关资源
最近更新 更多