【问题标题】:Redirect tomcat (as Spring tcServer) to different port将tomcat(作为Spring tcServer)重定向到不同的端口
【发布时间】:2012-05-30 21:46:12
【问题描述】:

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

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

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

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

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

我希望 Tomcat 上的 80 端口将您发送回负载均衡器上的 443。

所有这些都无需触及已部署的 web 应用程序。

有什么想法吗?

【问题讨论】:

    标签: java tomcat load-balancing amazon-elb


    【解决方案1】:

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

    【讨论】:

    • 想到了,但时间不够……我会发布下一个解决方案
    【解决方案2】:

    所以显然我想多了(好吧,根据我正在阅读的一些论坛,我有点想多了)。无论如何,这就是有效的方法(并且正在有效 - 我们正在生产中)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-18
      • 2013-10-01
      • 2012-06-19
      • 2020-02-23
      • 2019-09-25
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      相关资源
      最近更新 更多