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

将AWS ELB HTTP请求重定向到HTTPS

濮阳茂材
2023-03-14

当我们使用AWS应用型负载均衡将传入请求重定向到我们的服务器时,我们创建了一个SSL证书并将其设置为负载均衡器。它同时监听HTTP 80和HTTPS 443端口的流量。在这两种情况下,流量都被重定向到目标组实例的HTTP 80端口。

在这些情况下,有nginx服务器配置为侦听它们所在的实例的HTTP 80端口。

当我更新nginx.conf文件以将传入的HTTP请求重定向到HTTPS协议时,我们面临一个重定向循环。即使原始请求是一个HTTPS请求,在负载均衡器后面,EC2实例正在监听HTTP端口。所以不管原始请求是HTTP还是HTTPS,nginx都会无限发送redirect。

  1. 我看到Cloudfront是一个选择,但我对使用AWS的另一项服务并支付他们额外的钱来解决这个问题不感兴趣。
  2. 其他解决方案可能是在注册到ELB目标组的实例中将HTTP侦听器更改为HTTPS。由于我们使用的是ECS,因此我们必须在创建docker映像时找到一种方法来保护我们的SSL证书密钥。我不想将我们的SSL证书放在代码存储库中供jenkins使用。如果我选择这个解决方案,将会有额外的工作。

你有更简单的方法来解决这个问题吗?

共有2个答案

鲜于喜
2023-03-14

正如Mark B提到的,检查传入的prototol的自定义头值是处理这种情况并消除重定向循环的最简单方法。

但是,如果要确保端到端加密,可以在容器中部署自签名证书。负载均衡器不需要有效的公共证书即可连接到HTTPS源。

这样,您可以将ALB上的端口80转发到目标组上的端口80(甚至可以有一个单独的目标组用于重定向),并像现在这样强制重定向,并将ALB上的端口443转发到目标组上的端口443。

郁宾鸿
2023-03-14

Nginx总是通过HTTP获取请求,所以显然您不能让它重定向所有HTTP请求。ELB在发送到后端服务器的请求上设置一个特殊的HTTP头,名为x-forwarded-proto,您需要配置Nginx来检查浏览器和ELB之间的连接是否通过HTTP或HTTPS,如果是HTTP,则只重定向。我会在ServerFault上检查此答案。

 类似资料:
  • 我将spring saml扩展与Apache2.2+Tomcat7.0+OKTA(IdP)一起使用。securitycontext.xml如下所示: MetadataGeneratorFilter: 谢谢 奈良 HTTP请求转储:

  • 我们的整个网站将通过https提供服务。我在每条路线上都有“https”。但是,如果他们试图通过http将其重定向到https,我该如何将其重定向到https?

  • 我试图点击一个postendpoint,但它给出了错误302,当我在同一台服务器上尝试另一个get Url时,它给出了200。然后,我使用laxrirectstrategy()重定向了post请求。post请求正在重定向到get请求(只有同一个endpoint的方法名是get和post),它没有从post方法获得响应。有人能告诉我如何使用apahce httpClient 4.5将post请求重定

  • 问题内容: 这是我的standalone-full.xml配置,其中ssl配置了 security realm . Subsystem Socket Binding 问题答案: 重写规则可用于重定向用户。在undertow子系统(standalone.xml或domain.xml)中,你需要创建一个新的重写过滤器,然后在新的fitler-ref中启用该过滤器: 在过滤器部分中创建新的重写过滤器。在

  • 我正在尝试使用重定向规则设置静态web托管。在我的应用程序中,任何具有前缀api/(http://web.company.com/api)的请求都应该重定向到具有相同前缀(http://api.company.com/api)的另一个主机。我已按以下方式设置路由规则: 但请求没有被正确重定向。控制台中有两个不同的错误: XMLHttpRequest无法加载http://api.company.co

  • 问题内容: 我正在尝试通过springboot Web应用程序提供Angular2应用程序。我已经找到了许多非常简单的方法示例: https://spring.io/blog/2015/01/12/spring-and-angular-js-a-secure-single-page- application#using-spring-boot-cli https://github.com/zoua