将tomcat(作为Spring tcServer)重定向到不同的端口



我想做一些类似于SSL重定向的事情,但略有不同。

我有一个负载均衡器配置为侦听端口80 (HTTP)和443 (HTTPS)。

负载均衡器没有能力做任何SSL重定向,因为如果它做了,我的生活就太容易了(这是亚马逊的弹性负载均衡器,顺便说一句)。

我有Tomcat (tcServer)监听两个端口:80和81(都是HTTP)。

LB上的80端口将带您到tomcat上的80端口。LB上的443端口将带你到tomcat上的81端口(相同的web应用程序)。

我想让tomcat上的80端口将您发送回负载均衡器上的443端口。

而这一切都无需触及已部署的web应用。

任何想法?

一个解决方法:创建一个简单的web项目,不包含任何页面,只是一个简单的错误页面404错误重定向到你的负载均衡器的绝对URL的每个请求(以https://链接)。然后配置Tomcat在端口80上使用这个应用程序(即作为ROOT.war部署),并在端口81上提供原始应用程序。

所以很明显我想多了(嗯,我是基于我正在阅读的一些论坛而过度思考的)。无论如何,以下是有效的方法(并且正在有效-我们正在生产中)。

  1. 去获取Tuckey的URLRewrite过滤器,并将其首先添加到你的web.xml上的/*
  2. 将urlrewrite.xml添加到/WEB-INF/中,并放入默认配置。
  3. 在你的应用程序(从本地主机)上点击/rewrite-status以确保它正常运行。
  4. 创建一个规则,查找Amazon的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,您有两种选择。

  1. 你可以直接在WAR中包含urlrewrite.xml,它会自动工作。在这种情况下,您将需要添加一个规则来在您的开发环境中禁用它(您可以在port="80"上添加一个附加条件,以便仅在侦听端口80时启用重写,这是生产端口,而开发可能在8080上)。
  2. 您可以将URLRewrite添加到Tomcat lib目录中,并将过滤器添加到Tomcat的主web.xml中。这样做的好处是,你不需要修改你的应用程序来做到这一点。

相关内容

  • 没有找到相关文章

最新更新