我正在使用弹性beanstalk单一实例。 所以有Apacheconfiguration和tomcat是在http端口8080监听。Apacheconfiguration上使用SSL HTTPS 443。
问题是,tomcat使用httpredirect。 但是我不能设置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,如果直接访问它不会显示任何错误)
您可能想要在应用程序级别解决这个问题。 你应该build立一个完整的path到新的位置。 这应该包含三个组件:协议(https),主机名(来自请求标头)和path(根据应用程序的要求)。 您可能需要一个构build应用程序链接的实用程序类来确保一致性。
对于你可能想要使用相对path的链接。 这些将被发送到使用他们到达的协议的始发主机。
redirectredirect导致的请求,仍然让您看到混合内容。 这是因为初始redirect将是http而不是https。
在Apache服务器级别上,有一个模块将重写从http到https的响应中的path。 这是解决应用程序发送的断开链接的一种方法。 但是,我会限制到您无权访问的应用程序。
将httpsredirect到https的指令是ProxyPassReverse ,相关的configuration是:
<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来做到这一点,但是这很复杂,因此不可读。