我有一个 ELB,它首先被设置为以这种方式转发:
Protocal Port Forward-Protocol Port
Http 80 Http 80
Protocal Port Forward-Protocol Port
Https 443 Https 443
由于我将 SSL 证书添加到 ELB,并且我的 EC2 实例位于私有子网内,因此 AWS 支持工程师建议将 https 更改为转发为 http,如下所示:
Protocal Port Forward-Protocol Port
Http 80 Http 80
Protocal Port Forward-Protocol Port
Https 443 Http 80
他说这是一种更好的做法,因为 ELB 已经完成了 Https 中需要做的一切,所以没有理由给我的实例增加开销。
问题是,在我的 EC2 实例中,我的文件夹结构是:
- /var/www/html - 用于常规 http 请求
- /var/www/secure-用于安全的 https 请求。
我想强制我的网站只执行 Https 请求,所以我想在我的 *.80 虚拟中使用此代码:
<VirtualHost *:80>
...
#Force the https
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} https
#Here i need a rule to change the document root.
...
</VirtualHost>
我对这段代码的问题是它会传输请求 https,而我可能需要的是在 https 时更改文档根目录。
我可以假设,如果它到达 http 并转发到 https - 那么连接就已经是安全的。
答案1
使用重写规则后,所有流量都将是安全的 - 因此不需要非安全文件夹中的文件。
我将删除现有的 html 文件夹并将“安全”文件夹重命名为“html”。