首页 文章

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

提问于
浏览
1

我在端口80上的AWS EC2实例上运行了一个Apache Web服务器 . 我有一个带证书的ELB . 所有请求都被ELB拦截并转发到我的EC2实例,我的网络服务器在那里侦听任何调用 .

当任何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重定向它 . 有人可以告诉我我哪里错了吗?

1 回答

  • 2

    如果要在ELB上终止SSL,并且ELB和EC2之间的通信仅在端口80上,则永远不会调用您的代理配置 .

    要解决此问题,您有两个选择:第一个是将代理配置(:443 VirtualHost条目中的设置)添加到:80条目 .

    第二个选项是添加配置ELB以在443和80上与您的EC2实例通信 . 您将需要安装和配置SSL以及相应的证书(自签名将执行) .

相关问题