使用 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 终止(不是负载均衡器)