[英]Redirect Loop while redirecting all http requests to https using .htaccess
[英]Redirecting http to https using ReWrite rule using AWS sends all requests to default webroot instead of using ProxyPass
我有一个在端口80上的AWS EC2实例上运行的Apache Web服务器。我有一个带证书的ELB。 ELB会拦截所有请求,并将所有请求转发到我的EC2实例,在这里我的Web服务器将侦听所有呼叫。
当有任何HTTP流量出现时,我将使用下面提供的规则将其重定向到https,该规则存在于我的http-vhosts.conf文件中:
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
</VirtualHost>
现在在我的http-vhosts.conf中,我使用proxypass重定向进入端口443(这是默认的https端口)的所有流量,如下所示:
<VirtualHost *:443>
ServerName www.mywebsite.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
现在假设我打电话给:
http://www.mywebsite.com
它被重定向到:
https://www.mywebsite.com
但是,此链接现在提供httpd.conf文件中提供的默认Webroot中存在的index.html文件,而不是使用ProxyPass重定向它。 有人可以告诉我我要去哪里错吗?
如果要在ELB上终止SSL,并且ELB和EC2之间的通信仅在端口80上,则将永远不会调用您的代理配置。
要解决此问题,您有两个选项:第一个选项是将代理配置(在*:443 VirtualHost条目中具有的设置)添加到*:80条目。
第二种选择是添加配置ELB以在443和80上与您的EC2实例进行通信。您将需要安装和配置SSL以及适当的证书(自签名即可)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.