【问题标题】:HTTP to HTTPS Redirects for AWS ELB and Tomcat7 serverAWS ELB 和 Tomcat7 服务器的 HTTP 到 HTTPS 重定向
【发布时间】:2017-08-19 11:14:45
【问题描述】:

我有一个子域 (test.XXXX.com) 指向接受 HTTP(80) 和 HTTPS(443) 请求的 AWS ELB。我已经为 HTTPS 连接配置了 443 的 SSL 证书。 我尝试通过更改 web.xml 和 server.xml 在 Tomcat 级别执行 HTTP 到 HTTPS 重定向,如

中所述

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

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

   <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 异常。

【问题讨论】:

  • 对于健康检查,您是否厌倦了使用从重定向中排除的特定路由?
  • @Ashan 是的..这被排除在 HTTP 到 HTTPS 重定向之外并且工作正常。但是由于 ERR_TOO_MANY_REDIRECTS 导致其他页面无法访问
  • 如果你已经为Tomcat配置了SSL证书,那么在你的负载均衡器上你可以使用HTTPS 443 -&gt; HTTPS 443
  • @DusanBajic 在这种情况下响应为 502
  • 您好,您只需要在tomcat服务器上进行HTTP-> HTTPS重定向吗?

标签: tomcat ssl redirect amazon-ec2 amazon-elb


【解决方案1】:

我对您的问题有一个解决方案,但它与 tomcat 无关。 您可以使用 Cloudfront 发行版。
让我强调一些通过 Cloudfront Distribution 实现此目的的关键配置:

  • 选择网络分发版
  • 在源域名下拉列表中选择您的 ELB。 origin Path 将为空白,Origin Id 只是您选择的标识符。
  • 现在在默认缓存行为设置下,请为查看器协议策略选择将 HTTP 重定向到 HTTPS。请仔细检查所有其他设置并选择适合您的设置。它们应该相当简单明了。 (请输入您的域名 - test.xxxx.com 以获取备用域名)
  • 点击创建分发。
  • 创建分发后,转到分发并转到行为选项卡。
  • 在这里您会看到已经有一个默认条目。转到创建行为,输入您的路径模式。因此,如果您的健康检查网址是 test.xxxx.com/healthcheck,那么您的路径模式将变为 /healthcheck
  • 请为查看器协议策略选择 HTTP 和 HTTPS。
  • 最后,请在您的 route53 中为您的域添加一条记录,并将其指向您刚刚创建的云端分发。

实际上,它的作用是从 tomcat 中移除重定向,并在云端处理。默认情况下,所有请求都重定向到 HTTPS,而仅允许 /healthcheck 路径的 HTTP 请求。重定向不需要在较低级别处理。 请让我知道这是否适合您。 另外,请注意 route53 和 cloudfront 更改需要时间来传播。所以请等待足够的时间以成功测试

【讨论】:

  • 我正在寻找与云端不同的东西,感谢您的努力
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    您无法使用经典的 Elastic Load Balancer 执行此操作,但您可以使用新的 Application Load Balancer

    我建议您将负载均衡器切换到新的 ALB 和 configure the health check 以接受 200-399 作为健康响应代码。

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

    【讨论】:

      【解决方案4】:

      ELB 修复检查可以配置为使用 https 端点,检查选项:ping protocolhttp://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-healthchecks.html

      Ping 协议

      用于连接实例的协议。

      有效值:TCP、HTTP、HTTPS 和 SSL

      控制台默认:HTTP

      CLI/API 默认:TCP

      您也可以在任一端口 80/443 上尝试 TCP,这将忽略所有重定向。

      【讨论】:

      • 如果您查看他们使用 ELB 进行 HTTPS 的屏幕截图 - 您可以看到证书 ID 的前几个字符 - 因此使用 HTTPS 进行健康检查是行不通的。不过使用 TCP 进行健康检查是可行的。
      猜你喜欢
      • 2017-09-30
      • 1970-01-01
      • 2018-04-15
      • 2018-03-07
      • 2019-01-23
      • 2023-03-17
      • 2018-08-18
      • 2017-09-28
      • 1970-01-01
      相关资源
      最近更新 更多