繁体   English   中英

使用AWS的ReWrite规则将http重定向到https,将所有请求发送到默认Webroot,而不是使用ProxyPass

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM