【问题标题】:Issue with HTTPS to HTTP redirection by Elastic Load Balancer to Tomcat serverElastic Load Balancer 到 Tomcat 服务器的 HTTPS 到 HTTP 重定向问题
【发布时间】:2012-04-13 01:56:39
【问题描述】:

我有一个 ELB(Amazon Elastic Load Balancer)配置为负载平衡 HTTPS 上的最终用户请求,在后端我有我的应用程序在 HTTP 上配置的 Tomcat 服务器上运行。

因此,当我的最终用户向应用程序发出请求时,请求将在 HTTPS 上,因为他们访问 ELB,现在,ELB 在内部通过 HTTP 将其重定向到 tomcat 服务器。在 tomcat 中,我的应用程序通过 Spring Security 受到保护,如果请求是针对受保护资源的并且用户未登录,则用户将被重定向到配置的登录页面。现在,这种对最终用户的重定向将通过 HTTP 进行,因为 tomcat 服务器最初从 ELB 获得的请求是 HTTP。现在这将导致 404,因为我没有为 HTTP 上的传入流量进行配置。

我们如何解决这个问题?是在最终用户 ELB 和 ELB-tomcat 上都有 HTTPS 的唯一选择,还是我在这里遗漏了一些东西?

【问题讨论】:

    标签: tomcat spring-security amazon-web-services http-redirect amazon-elb


    【解决方案1】:

    ELB 设置一个X-Forwarded-Proto 标头,让您可以了解客户端用于连接到负载平衡器的协议。请参阅documentation

    你可以配置spring security来查看这个header,比如this answer

    【讨论】:

      【解决方案2】:

      我很难在网上找到这个,最后我找到了一种方法。

      问题在于,一旦 http 在内部重定向到 ELB 上的 https 端口,它就会被重定向回端口 80,从而创建了一个循环。这是因为 ELB 卸载了 SSL,然后再次连接到端口 80。

      最后,经过一些研究,我得到了正确的重写规则来管理 X-Forwarded-Proto,即使 ELB 卸载 SSL Tomcat 也可以到达现在源请求使用 SSL。

      这是在 Tomcat 8 上使用 Tomcat Valves 完成的。我确信它也可以在早期版本上完成。我已经使用阀门在 Tomcat 上启用了重写规则。之后就像在 Apache 上编写重定向规则一样简单。

      步骤如下:

      第 1 步:

      一个。打开tomcat conf文件夹下的context.xml 湾。将以下行粘贴到正下方

      <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
      

      注意:这将全局启用阀门。如果需要为特定主机启用此功能,则应将其粘贴到该特定域的 server.xml 中

      第 2 步:

      一个。打开 conf/server.xml 湾。将以下行粘贴到 &lt;/Host&gt; 上方

      <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
      

      第 3 步:

      一个。打开 web.xml 所在的文件夹。例如,如果应用程序托管在 ROOT 下,则 web.xml 将位于 webapps/ROOT/WEB-INF 下

      b.同样,如果应用程序托管在 webapps/myappfolder 下,那么 web.xml 将位于 webapps/myappfolder/WEB-INF

      c。在 WEB-INF 文件夹中新建一个文件 rewrite.config。并粘贴以下重写规则:

      RewriteCond %{HTTP:X-Forwarded-Proto} !https
      RewriteCond %{HTTPS} off
      RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
      

      【讨论】:

        猜你喜欢
        • 2021-08-30
        • 2017-09-28
        • 2020-08-31
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 2018-01-07
        • 2019-02-04
        • 2016-06-19
        相关资源
        最近更新 更多