繁体   English   中英

AWS Elastic Load Balancer有选择地启用SSL

[英]AWS Elastic Load Balancer selectively enable SSL

我目前有一个基于Rails的Web应用程序,该应用程序需要一小部分页面才能通过HTTP进行服务-但希望通过HTTPS来提供其余的页面。 在我当前的AWS设置中,SSL在弹性负载均衡器处终止,并且与我的应用程序服务器的所有通信都是通过HTTP进行的。 因此,不适合使用机架式SSL Enforcer之类的解决方案。 目前,我在每个页面中提供以下JS代码段以处理重定向:

<% 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选择性地提供某些页面并在负载均衡器级别进行控制的方法吗?

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

您要么必须实现此逻辑

  1. 带有中间件,例如,rack-ssl-enforcer

    查看关于机架ssl强制执行器的文档,它似乎支持开箱即用的X-Forwarded-Proto ,因此您可能根本不需要执行任何操作。 您可以在源代码中看到标头受到尊重。

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

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

     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标头。 例如,参见此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM