当前位置: 首页 > 知识库问答 >
问题:

Engine Yard Rails应用程序-在弹性负载平衡器(ELB)处终止SSL并传递X-Forwarded-Proto http头

寿丰
2023-03-14

跟踪了https://support.cloud.engineyard.com/entries/21715452-use-elastic-load-balancing-with-engine-yard-cloud的引擎场医生

设置好后,似乎运行良好,允许我们在ELB上使用SSL端接,而不是在服务器上使用SSL端接。理论上,这应该允许我们在一个环境中使用多个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。

有人能对此提供一些见解或解决方法吗?到目前为止,我尝试过EY支持,但运气不太好。

共有1个答案

容飞掣
2023-03-14

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

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

 类似资料:
  • 我有一个java应用程序在两个ec2实例中运行,客户可以使用AWS应用程序负载均衡器访问它们。现在ALB可以作为SSL终止点工作。所有请求都通过端口443上的ALB。工作正常。问题是java应用程序有时需要重定向到不同的路径。由于java应用程序不知道它在SSL ALB后面运行,因此重定向路径包括超文本传输协议://而不是https:// 有什么方法可以在我的应用程序之外将协议修改为https?

  • 我们有两个Kafka节点,出于本问题范围之外的原因,我们希望设置一个负载平衡器来终止生产者(客户端)的SSL。负载平衡器托管的SSL证书将由客户端本机应信任的受信任/根CA签名。 所以连接看起来像: 这是否可行,或者Kafka是否以某种方式要求直接在Kafka服务器上设置SSL? 谢谢

  • 我们有一个在ec2实例上运行的web应用程序。我们添加了AWS ELB,以将所有请求路由到负载平衡器的应用程序。SSL证书已应用于ELB。 我担心ELB和ec2实例之间的HTTP通信是否安全?或者我应该在ELB和ec2实例之间使用HTTPS通信吗? AWS是否保证ELB和ec2实例之间HTTP通信的安全性?

  • 我正在尝试配置AWS应用型负载均衡器(与经典负载均衡器相比)以将流量分配到我的EC2 Web服务器。出于合规性原因,我的应用程序需要端到端SSL/HTTPS加密。 在我看来,确保在客户端和web服务器之间的整个过程中对流量进行加密的最简单方法是终止web服务器上的HTTPS连接。 我的第一个问题:是否可以通过AWS应用程序负载平衡器将HTTPS流量以这种方式传递到负载平衡器后面的web服务器? 根

  • 是否可以使用AWS应用程序负载平衡器和双向ssl(客户端证书)? 我当前的设置支持使用通过tcp到Web服务器endpoint的经典ELB转发。我现在需要使用URL路由流量,并希望在可能的情况下使用AWS应用程序负载均衡器进行路由。 如果没有,有没有关于如何在AWS中使用url路由流量的建议?

  • 我在AWS CLB后面有一个nginx(k8s中的nginx入口)设置,根据HTTP头和经典负载平衡器以及经典负载平衡器的侦听器配置,我应该能够在nginx中接收X-Forwarded-Proto头。 但是在经历了CLB监听器配置之后,我没有看到任何关于这个设置的信息,我将其设置为转发TCP端口443并尝试在nginx中检查,返回null