我目前有一个基于Rails的Web应用程序,该应用程序需要一小部分页面才能通过HTTP进行服务-但希望通过HTTPS来提供其余的页面。在我当前的AWS设置中,SSL在弹性负载均衡器处终止,并且与我的应用程序服务器的所有通信都是通过HTTP进行的。因此,不适合使用Rack 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伙计们的这篇博客文章。
您要么必须实现此逻辑
带有中间件,例如,rack-ssl-enforcer
查看关于机架ssl强制执行器的文档,它似乎支持X-Forwarded-Proto
开箱即用,因此您可能根本不需要执行任何操作。您可以在源代码中看到该标头受到尊重。
在您的应用程序中(可能带有重定向响应,而不是在客户端上)
在反向代理中,例如您的应用服务器和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
正确传递标题。例如,参见此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句