当 tomcat 发生重定向时如何将 http 更改为 https

当 tomcat 发生重定向时如何将 http 更改为 https

我使用的是 elastic beanstalk 单实例。因此,配置了 apache,tomcat 在后面监听 http 端口 8080。Apache 配置为使用 ssl https 443。

问题是 tomcat 使用 http 重定向。但我无法设置 apache 将 http 更改为 https。因此,混合内容错误发生,导致应用程序无法运行。

到目前为止,我尝试了以下设置:在虚拟主机 *:80 中,我把

<IFModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/%$1 [R, L]
</IFModule>

我也尝试过

RedirectMatch ^(/.*)$ https://thepennantrace.com/$1

两者都不起作用。

我想知道正确的设置方法是什么?(应用程序通过 Facebook 运行,如果直接访问它不会显示任何错误)

答案1

您可能希望在应用程序级别解决此问题。您应该构建到新位置的完整路径。这应该由三个部分组成:协议(https)、主机名(来自请求标头)和路径(根据应用程序的要求)。您可能需要一个实用程序类来为应用程序构建链接以确保一致性。

对于链接,您可能希望使用相对路径。这些将使用它们到达的协议发送到原始主机。

重定向导致的请求仍会留下混合内容。这是因为初始重定向将是 http 而不是 https。

在 Apache 服务器级别,有一个模块会将响应中的路径从 http 重写为 https。这是修复应用程序发送的损坏链接的一种方法。但是,我会将其限制在您无权访问的应用程序上。

答案2

http重定向到的更改的指令和相关配置是httpsProxyPassReverse

<virtualhost *:80>
redirect   permanent  /    https://example.com
</virtualhost>

<virtualhost *:443>
ProxyPass        /app/     http://my-tomcat:8080/app/
ProxyPassReverse /app/     http://my-tomcat:8080/app/

...
## don't use ProxyPreserveHost ON as it breaks ProxyPassReverse

</virtualhost>

是的,您可以使用它来做到这一点RewriteEngine,但它很复杂,因此难以阅读。

相关内容