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

AWS弹性负载平衡器有选择地启用SSL

燕建中
2023-03-14

我目前有一个基于rails的Web应用程序,它需要通过HTTP提供一小部分页面——但更喜欢通过HTTPS提供其余部分。在我当前的AWS设置中,SSL终止于弹性负载均衡器,与我的应用服务器的所有通信都通过HTTP进行。正因为如此,像Rack SSL Enforcher这样的解决方案是不合适的。目前,我在每个页面中提供以下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有选择地为某些页面提供服务并在负载平衡器级别进行控制的方法吗?

共有1个答案

衡丰茂
2023-03-14

ELB本身目前不支持这一点,但是ELBs提供了一个X-Forwarded-Proto头。您可以对此进行检查,以查看来自客户端的请求是否通过HTTPS。然后,如果需要,可以提供重定向响应,而不是页面内容。有关更多信息,请参阅AWS的这篇博文。

你也必须实现这个逻辑

>

查看rack ssl enforcer的文档,它似乎支持现成的X-Forwarded-Proto,因此您可能根本不需要做任何事情。您可以在源代码中看到,标头得到了尊重。

在应用程序中(可能使用重定向响应,而不是在客户端上)

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

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

 类似资料:
  • 我正在尝试为我的AWS EKS群集的AWS负载平衡器配置SSL。负载平衡器正在代理我的群集上运行的Traefik实例。这在HTTP上运行良好。 然后,我在Cert Manager中创建了我的AWS证书,复制了ARN并遵循了文档的这一部分:服务-Kubernetes 但是证书没有链接到AWS负载平衡器中的侦听器。我在网上找不到更多的文档或工作示例。有人能给我指出一个吗? LoadBalancer配置

  • 我在私有子网实例上托管了一个web应用程序,因为该应用程序面向不同地理位置的组织内部用户。此应用程序需要AWS CloudFront支持,以便更有效地提供静态内容。问题是-我需要面向internet的负载平衡器(在公共子网中有实例)作为CloudFront分发的源。 我不希望面向internet的ELB和公共子网中的结果实例。 我可以利用AWS CloudFront连接到内部ELB吗?

  • 我试图为我们的服务器安装负载平衡器。如果使用http,它可以正常工作。但是当我切换到https时 我在浏览器控制台中遇到以下错误: 混合内容:页面位于'https://www.something.com/'通过HTTPS加载,但请求了一个不安全的脚本'…mootools.js'。此请求已被阻止;内容必须通过HTTPS提供 我想我做了一些硬代码,比如“http://www.something.com

  • 我希望在现有的服务器设置中集成WAF,因为我有经典的负载平衡器(带有EC2实例),它不支持WAF,我需要迁移到应用程序负载平衡器。 是否可以在不更改DNS(记录)的情况下将现有的经典负载平衡器迁移到应用程序负载平衡器?

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

  • 目标:将弹性/静态IP分配给负载平衡器(LB),以服务于处理DNS(端口53)、HTTPS(端口443)、HTTP(端口80)的EC2实例。 需要静态IP来正确配置DNS记录(即A记录)。需要在后端/服务器上终止TLS,以提供无限制的 经典的负载平衡器允许自定义安全规则,并允许在EC2实例上终止SSL。问题是静态IP不能分配给经典LB,只能分配给其中的单个实例,这无法平衡负载。 要分配静态IP,我