我想做一些类似于SSL重定向的事情,但略有不同。
我有一个负载均衡器配置为侦听端口80 (HTTP)和443 (HTTPS)。
负载均衡器不能做任何SSL重定向,因为如果它做了,我的生活就太简单了(它是Amazon的弹性负载均衡器,btw)。
我让Tomcat (tcServer)监听两个端口: 80和81 (都是超文本传输协议)。
LB上的端口80会将您带到tomcat上的端口80。LB上的端口443会将您带到tomcat上的端口81 (相同的web应用程序)。
我想让tomcat上的80端口把你送回负载均衡器上的443。
所有这些都不需要接触已部署的webapp。
有什么想法吗?
发布于 2011-09-17 05:35:15
一种解决办法:创建一个简单的web项目,它不包含任何页面,只包含404错误的简单错误页面,该页面将每个请求重定向到负载均衡器的绝对URL (使用https://链接)。然后将Tomcat配置为在端口80上使用此应用程序(即部署为ROOT.war),并在端口81上为原始应用程序提供服务。
发布于 2011-09-18 12:12:33
显然,我对此考虑过度了(好吧,我是基于我正在阅读的一些论坛而被引导到这一点的)。无论如何,以下是有效的方法(并且正在发挥作用--我们正在生产中)。
中,然后将状态添加到/WEB-INF/,并在您的应用程序上(从https://.... )添加一个默认的urlrewrite.xml /rewrite-status,以确保它正在运行一条规则,该规则将查找亚马逊的X-Forwarded-Proto头并确保它的值等于“HTTPS值”;如果不是,则将其转发回HTTPS
你就完了。最终的配置如下所示:
/WEB-INF/web.xml
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>/WEB-INF/urlrewrite.xml
<rule match-type="regex">
<condition type="header" operator="notequal" name="X-Forwarded-Proto">^HTTPS$</condition>
<from>^.*$</from>
<to type="permanent-redirect" last="true">https://%{server-name}%{request-uri}</to>
</rule>为此,您只需要在一个端口上运行tomcat。关于如何启用URLRewrite,您有两种选择。
https://stackoverflow.com/questions/7449125
复制相似问题