我使用的是 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
重定向到的更改的指令和相关配置是https
:ProxyPassReverse
<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
,但它很复杂,因此难以阅读。