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

HTTP 到 HTTPS 的重定向适用于 AWS 弹性负载蛋白和 Tomcat7 服务器

淳于典
2023-03-14

我有一个子域(test.XXXX.com)指向接受 HTTP(80) 和 HTTPS(443) 请求的 AWS 弹性负载均衡。我已为 HTTPS 连接配置了 443 的 SSL 证书。我尝试过通过更改Web.xml和服务器在Tomcat级别执行HTTP到HTTPS重定向.xml如中所述

http://www.journaldev.com/160/steps-to-configure-ssl-on-tomcat-and-setup-auto-redirect-from-http-to-https

但问题是,我需要一个用于 AWS ELB 运行状况检查的终端节点,该终端节点不执行 HTTP 到 HTTPS 重定向。我尝试了不同的解决方案,但没有成功。我也试过了

   <security-constraint>
                <web-resource-collection>
                        <web-resource-name>Protected Context</web-resource-name>
                        <url-pattern>/*</url-pattern>
                </web-resource-collection>

                <user-data-constraint>
                        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
                </user-data-constraint>
    </security-constraint>
   <security-constraint>
                <web-resource-collection>
                        <web-resource-name>Protected Context</web-resource-name>
                        <url-pattern>/XXXXX/XXXXXX.html</url-pattern>
                </web-resource-collection>

    </security-constraint>

我的服务器server.xml具有如下配置

<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />


<Connector port="443" maxThreads="2000" scheme="https" secure="true" SSLEnabled="true" keystoreFile="/home/XXXXX/XXXXX.keystore" 
               keystorePass="XXXXX" clientAuth="false" keyAlias="XXXX" 
               sslProtocol="TLS" protocol="org.apache.coyote.http11.Http11Protocol"/>

但是当尝试通过浏览器访问它时,它会ERR_TOO_MANY_REDIRECTS。

共有3个答案

公羊涛
2023-03-14

由于您在Tomcat中使用HTTP到HTTPS重定向,因此最简单的解决方案是将重定向视为有效响应。

使用经典的弹性负载均衡器无法做到这一点,但可以使用新的应用型负载均衡器。

我建议您将负载均衡器切换到新的ALB并将健康检查配置为接受200-399作为健康响应代码。

您还可以通过切换到新的应用型负载均衡获得其他好处,例如它每小时更便宜,并且可以根据路径和主机名路由到不同的实例组。

邴宏大
2023-03-14

现在AWS ELB支持两个新操作:重定向和固定响应。您可以将这些操作配置为基于内容的路由规则的一部分,使您能够将此功能卸载到负载均衡器

通过重定向操作,负载平衡器可以将传入的请求从一个URL重定向到另一个URL。这包括将HTTP请求重定向到HTTPS请求的能力。

颜文康
2023-03-14

我有一个解决你问题的办法,但这与tomcat无关。您可以使用Cloudfront分发版
让我强调一下通过Cloudfront分发实现这一目标的几个关键配置:

  • 选择Web分发
  • 在“原始域名”下拉列表中选择您的ELB。原点路径将为空,原点Id只是您选择的标识符
  • 现在,在“默认缓存行为设置”下,请为查看器协议策略选择“将HTTP重定向到HTTPS”。请仔细检查所有其他设置,并选择适合您的设置。它们应该相当简单和直接。(请输入您的域名-test.xxx.com作为备用域名)
  • 单击创建分发
  • 创建分发后,转到分发并转到行为选项卡。
  • 在这里,您将看到已经有一个默认条目。转到创建行为,输入路径模式。因此,如果您的健康检查url是test.xxxx。com/healthcheck,然后您的路径模式变成/healthchek
  • 请为查看器协议策略选择HTTP和HTTPS
  • 最后,在您的路由53中,请为您的域添加一条记录,并将其指向您刚刚创建的cloudfront分发版

因此,这有效地作用是,它消除了tomcat的重定向,并在云前线级别进行处理。默认情况下,所有请求都重定向到 HTTPS,而仅针对 /healthcheck 路径,则允许 HTTP 请求。重定向不需要在较低级别处理。请让我知道这是否适合您。另外,请注意,route53 和云前更改需要一些时间来执行。因此,请等待足够的时间才能获得成功的测试

 类似资料:
  • 问题是,我还想将HTTP访问重定向到HTTPS,然后我试图添加一个规则将80重定向到443,因此它将落入第一个规则(443到8080)并使用证书,但它不起作用。在网上研究,我发现我应该在我的。htacess文件中添加一些行,但也不起作用。我认为这不是我的解决方案,因为所有HTTPS的东西都在AWS端,有没有一种方法可以只通过AWS将HTTP重定向到HTTPS而不改变服务器?

  • 以下是我的设置: EC2与Apache使用弹性负载均衡器。 我希望所有超文本传输协议流量都自动重定向到https。我找到了这个reco,并通过添加到我的httpd.conf文件中来尝试: 然而,这在我重新启动服务器之前或之后都不起作用。HTTP没有重定向,我的站点抛出了各种错误,直到我从配置中删除了该规则。 我认为我更新文件错误或负载均衡器设置不正确。对于负载均衡器的侦听器,我有LB协议HTTP,

  • 我使用AWS Elastic Beanstalk在一些EC2实例上使用负载平衡器来托管我的网站。 我正在使用OctoberCMS(作为框架的laravel风格) 我已通过 AWS 证书管理器通过 ELB 设置了 SSL 证书,一切正常。 但是有一个问题。 我想将HTTP重定向到HTTPS。 根据AWS,我得到了一个小的。执行该工作的htaccess代码片段: 但是,当用户到达他们需要因此他们开始以

  • 我在beanstalk和配置的nginx实例上有一个经典的负载均衡器。我想重定向http到https请求。 我设置了负载均衡器侦听器重定向到端口80到它的实例。 我在.ebextensions/nginx_config.config中创建了一个文件,在其中设置重定向并筛选出HealthCheck。 请参阅下面的配置重写: 但似乎什么也没有发生,服务器仍然没有重定向到HTTPS。好像我的配置被忽略了

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