【发布时间】: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”?
【问题讨论】:
-
你不想要
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
标签: amazon-web-services tomcat elastic-load-balancer