我很难在网上找到这个,最后我找到了一种方法。
问题是,一旦 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 b. 在下面粘贴以下行
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
注意:这将全局启用阀门。如果需要为特定主机启用此功能,则应将其粘贴到该特定域的 server.xml 中
第2步:
一种。打开 conf/server.xml b. 在上面粘贴以下行 </Host>
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
第 3 步:
一种。打开 web.xml 所在的文件夹。例如,如果应用程序托管在 ROOT 下,则 web.xml 将位于 webapps/ROOT/WEB-INF
湾。同样,如果应用程序托管在 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]