使用 Cloudfront SSL/TLS 强制 Apache 将 HTTP 视为 HTTPS

使用 Cloudfront SSL/TLS 强制 Apache 将 HTTP 视为 HTTPS

我有一个 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 等,请从标题开始,然后从那里开始

相关内容