我有一个 CloudFront 分发版,它使用 AWS 证书来发送 SSL/TLS 请求https://example.com
,并且将这些请求转发到 EC2。
分发设置为在其自身和原点(EC2)之间使用 HTTP 协议,并且行为设置Redirect HTTP to HTTPS
为将所有内容http://example.com
重定向到https://example.com
。
EC2 有一个提供文件服务的 Apache 服务器。但是,当我访问时,https://example.com
所有静态资源(css、js)都通过 HTTP 提供,而这些资源由于 而被浏览器阻止loading mixed active content
。
我当前的 Apache 配置只有默认配置/etc/apache2/sites-enabled/000-default.conf
,<VirtualHost *:80>
不<VirtualHost *:443>
存在。另外,我没有创建,<VirtualHost *:443>
因为我没有 SSL 证书和密钥。
我该如何解决这个问题?可以通过反向代理解决吗?这里的最佳做法是什么?
更新:我的设置与此答案中描述的相同,但没有 ELBhttps://stackoverflow.com/a/44453691/1197636。
答案1
您需要让 Apache 知道您位于负载均衡器后面。这由标头完成X-Forwarded-Proto
。这可以在您的虚拟主机配置或 .htaccess 中设置。
SetEnvIf X-Forwarded-Proto "https" HTTPS=on
另一个重要部分是配置你的框架/代码以通过 https 提供内容。如果你有硬编码的 URL 等,请从标题开始,然后从那里开始