使用 tomcat 服务器和 aws 负载均衡器将 http 请求重定向到 https

Posted

技术标签:

【中文标题】使用 tomcat 服务器和 aws 负载均衡器将 http 请求重定向到 https【英文标题】:Redirect http requests to https with tomcat server and aws load balancer 【发布时间】:2017-10-21 21:52:46 【问题描述】:

我已经设置了一个 ec2 实例,其中包含一个在 tomcat 服务器上运行的 java Web 应用程序和一个将端口 80 和 443 定向到 ec2 实例上的端口 8080 的 aws 应用程序负载平衡器。

我已将tomcat上的server.xml配置改成如下

<Connector port="8080" protocol="HTTP/1.1"
proxyPort="443"
proxyName="sub.mydomain.com"
scheme="https"
secure="true"
connectionTimeout="20000"
redirectPort="8443" />

现在我可以连接到“sub.mydomain.com”和“https://sub.mydomain.com”。但是如何将所有“http://sub.mydomain.com”请求重定向到“https://sub.mydomain.com”?

【问题讨论】:

这会帮助你***.com/questions/24603620/… 你不想要redirectPort="8443"。你想要redirectPort="443"。如果端口 8080 是 Tomcat 节点上的安全端口,那么您根本不需要 redirectPort(因为 Tomcat 永远不会使用它)。 @jzaa 引用页面中的示例是正确的,但它是一个 php 示例。在 Java 世界中,您会希望使用 Tomcat's rewrite valve 或 Tuckey's urlrewrite filter 之类的东西。 ChristopherSchultz,@jzaa,感谢您的意见。这是我设法让它工作的方法。我将来自 elb 的所有 443 个请求重定向到 ec2 实例上的端口 8080,并将 elb 上的所有 80 个请求重定向到端口 80。在实例内部,我设置了一个 nginx 服务器,它将所有使用 $http_x_forwarded_proto = '80' 的请求重新路由到 https 【参考方案1】:

只需将其添加到您的 web.xml 中

<security-constraint>
    <web-resource-collection>
        <web-resource-name>HTTPSOnly</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

【讨论】:

以上是关于使用 tomcat 服务器和 aws 负载均衡器将 http 请求重定向到 https的主要内容,如果未能解决你的问题,请参考以下文章

服务器上的 AWS 负载均衡器、静态 IP 和 SSL 终止(不是负载均衡器)

ECS 服务的 AWS 网络负载均衡器运行状况检查失败

AWS 负载均衡器 502

AWS 使用负载均衡器设置 DNS

在 AWS 中,如何将 Web 服务器安全组配置为仅接受来自 AWS 中的负载均衡器的流量?

aws - 通过基于子域的应用程序负载均衡器路由请求