我可以从自定义源(EC2 实例或负载均衡器)使用我的应用程序,但是无法在 CloudFront 上使用。为什么?

上次更新时间:2019 年 6 月 24 日

我目前使用 Amazon Elastic Compute Cloud (Amazon EC2) 实例或负载均衡器作为我的网站或应用程序的自定义源。我可以直接连接到自定义源,但是无法从 Amazon CloudFront 获取相同的内容,或者 CloudFront 返回错误。我应该如何解决这个问题? 

解决方法

请尝试以下问题排查步骤:

确定错误响应

通过查看浏览器开发人员工具中的“网络”选项卡,确定 CloudFront 返回的 HTTP 响应标头。或者,您也可以使用 cURL 等实用程序来确定。

如果您接收到 HTTP 502 状态代码(无效网关)响应,则问题可能源自 CloudFront 与源之间的 SSL 连接。有关问题排查说明,请参阅 HTTP 502 状态代码(无效网关)

如果您接收到 HTTP 504 状态代码(网关超时)响应,那么问题可能源自安全组或防火墙的访问配置。有关问题排查说明,请参阅 HTTP 504 状态代码(网关超时)

根据请求标头、Cookie 或查询字符串验证转发

如果您的应用程序需要特定请求标头、Cookie 或查询字符串,请更新您的分配的缓存行为,以将所需参数转发给源。在默认设置情况下,CloudFront 可能不会转发所需参数。

有关更多信息,请参阅根据 Cookie 缓存内容根据查询字符串参数缓存内容根据请求标头缓存内容

查看允许的 HTTP 方法

默认情况下,CloudFront 只允许 GET 和 HEAD HTTP 方法。如果您在来源服务器上运行应用程序,并且通过 CloudFront 访问应用程序,请查看调用应用程序所需的 HTTP 方法。您必须在分配上允许这些 HTTP 方法。例如,如果您通过运行应用程序来提交表单,则可能需要在分配上允许 POST 方法。有关如何更改分配上允许的 HTTP 方法的说明,请参阅允许的 HTTP 方法

解决客户端与 CloudFront 之间的 SSL 问题

如果您由于 SSL 问题无法通过 CloudFront 访问您的网站或应用程序,请参阅为什么 CloudFront 不通过 HTTPS 提供我的域名?

解决频繁出现的重定向问题

如果您在尝试通过 CloudFront 加载网站或应用程序时频繁遇到重定向问题,请检查 CloudFront 上的源配置。此外,请检查来源服务器的重定向策略。

在典型的工作流中,客户端会连接到 CloudFront,然后 CloudFront 会连接到来源服务器。要使工作流正常运行,分配的源协议策略和来源服务器的重定向策略必须彼此兼容。

例如,如果您的来源服务器将所有 HTTP 请求重定向到 HTTPS,并且您分配的源协议策略被设置为 HTTP,则系统将在一个循环中发送请求。在这种情况下,如果客户端请求 http://d12345.cloudfront.net/example.image,则 CloudFront 会请求来源服务器通过 HTTP 获取内容。来源服务器接收到请求后,会将其从 HTTP 重定向到 HTTPS。系统会使用 HTTPS 将请求路由回 CloudFront,然后 CloudFront 将使用 HTTP 再次向源发出请求,从而重新启动请求循环。

要解决频繁出现的重定向问题,请使用下列配置之一:

  • 更改您的 CloudFront 分配的源协议策略为仅使用 HTTPS,这要求您的自定义来源服务器安装有效的 SSL 证书。
  • 如果您的来源服务器上尚未安装有效的 SSL 证书,您可以选择删除重定向策略。然后,您可以将来源服务器配置为接受 HTTP 请求。
    警告:不建议为敏感信息使用 HTTP 请求,因为此类通信采用纯文本形式。

这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?