【问题标题】:AWS Elastic Load Balancer selectively enable SSLAWS Elastic Load Balancer 有选择地启用 SSL
【发布时间】:2014-08-29 13:16:52
【问题描述】:

我目前有一个基于 Rails 的 Web 应用程序,它需要通过 HTTP 提供一小部分页面 - 但更喜欢通过 HTTPS 提供其余页面。在我当前的 AWS 设置中,SSL 终止于弹性负载均衡器,并且与我的应用服务器的所有通信都通过 HTTP。因此,Rack SSL Enforcer 之类的解决方案并不合适。目前,我在每个页面中提供以下 JS sn-p 来处理重定向:

<% if should_be_ssl? %>
<script>
  if (window.location.protocol != "https:"){
    window.location.href = "https:" + window.location.href.substring(window.location.protocol.length);
  }
</script>
<% else %>
<script>
if (window.location.protocol != "http:"){
  window.location.href = "http:" + window.location.href.substring(window.location.protocol.length);
}
</script>
<% end %>

每次访问这些页面之一时,都会对性能造成相对显着的影响。有谁知道通过 SSL 选择性地提供某些页面并在负载均衡器级别控制它的方法?

【问题讨论】:

    标签: ruby-on-rails ssl amazon-web-services https amazon-elb


    【解决方案1】:

    目前 ELB 本身不支持此功能,但 ELB 提供了 X-Forwarded-Proto 标头。您可以检查此项以查看来自客户端的请求是否通过 HTTPS。然后,如有必要,您可以提供重定向响应而不是页面内容。有关更多信息,请参阅 AWS 人员的this blog post

    你也必须实现这个逻辑

    1. 使用中间件,例如 rack-ssl-enforcer

      查看rack ssl enforcer 的文档, 它似乎支持开箱即用的X-Forwarded-Proto, 所以你可能根本不需要做任何事情。你可以在里面看到 the source 标头受到尊重。

    2. 在您的应用程序中(可能带有重定向响应 而不是在客户端上)

    3. 在反向代理中,例如您的应用服务器和 ELB 之间的 haproxy

      acl is_http hdr(X-Forwarded-Proto) http
      acl account_login url_beg /account/login
      redirect scheme https code 301 if account_login is_http
      

    根据您的配置,如果您在 ELB 和任何检查标头的对象之间有任何其他反向代理,您可能需要配置它们以正确传递 X-Forwarded-Proto 标头。例如,请参阅this issue

    【讨论】:

    • 谢谢,乔!我今天会检查一下,如果这对我有用,请告诉你。
    • 嘿,@DanL。进展如何? rack-ssl-enforcer 能胜任这项任务吗?
    猜你喜欢
    • 1970-01-01
    • 2014-02-02
    • 2015-10-24
    • 2017-05-10
    • 1970-01-01
    • 2016-12-26
    • 2014-09-28
    • 2017-03-10
    • 2013-11-27
    相关资源
    最近更新 更多