【问题标题】:Mapping Host Header to custom header for secondary origin将主机标头映射到辅助来源的自定义标头
【发布时间】:2017-05-09 23:12:27
【问题描述】:

我正在寻找一种将请求主机标头从云端来源传递到 API 网关或自定义端点(亚马逊之外)的方法。

基本上我有多个域映射到一个云前端,我试图根据服务器上的索引请求进行预渲染,同时让所有其他资源通过。

如果这是不可能的,那么 lambda edge 能做到吗?

谢谢!

【问题讨论】:

  • 您是否尝试将标头列入白名单? docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/… 由于您不“计算”,只需“传递”标头,我相信 lambda edge 只有在您需要以不同名称复制标头时才有用。
  • 我希望使用 lambda edge 我可以将主机标头复制到 X-CUSTOM-HOST 之类的东西上。我确实尝试将标头列入白名单,但是在发布到 API 网关和我作为测试旋转的 ec2 自定义端点时这不起作用。
  • 我上周请求了 Lambda Edge,但仍未在我们的帐户中看到它。我正在考虑它;我将能够更新该自定义标头,将信息传递到网关,然后在 lambda 方法中执行我需要的操作,以对我希望使用的特定来源进行预渲染。
  • Host: 标头列入白名单确实 有效,除非在访问 API 网关或 S3 时。它绝对有效,我一直这样做。但是,您要完成什么并不完全清楚——您想要的最终结果是什么? “基于索引请求预渲染”意味着每个站点的/ 页面不同,但站点的其余部分都相同?
  • @Michael-sqlbot:我正在尝试转到 API 网关并传递请求主机,因为我将许多域别名为一个 CF 域。我希望使用 lambda edge,但是已经 3 周了,我还在等待使用它。由于我唯一需要 API 网关的是 index.html 文件,因此我创建了一个自定义来源/行为来利用它。在转发到 API 网关之前,您是否知道如何在某些自定义标头上修改和存储主机?

标签: amazon-web-services amazon-cloudfront


【解决方案1】:

在 Lambda@Edge 离开预览之前,这是您的解决方法:

为每个域名创建一个单独的 CloudFront 分配,并添加一个唯一的自定义源标头。

如果您已将多个 CloudFront 分配配置为使用相同的源,您可以为每个分配中的源指定不同的自定义标头,并使用您的 Web 服务器的日志来区分 CloudFront 为每个分配转发的请求.

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/forward-custom-headers.html

不用说,“为您的 Web 服务器使用日志”只是此值的一种可能用途。您还可以通过检查插入的请求标头来使用它来识别请求是针对哪个域的。

例如,对于站点api-42.example.com,添加一个自定义源头X-Forwarded-Host,其静态值与主机名api-42.example.com 相同。

CloudFront 在将每个请求发送到源服务器时将其添加到自定义源标头。

如果客户端出于某种原因发送相同的标头,CloudFront 会丢弃客户端发送的内容,然后再将您的标头和值添加到每个请求。

由于实际的 CloudFront 分配本身是免费的,因此此解决方案没有真正的危害。如果您需要创建很多它们,可以使用 aws-cli 轻松编写脚本。默认情况下,帐户可以创建 200 个不同的分发版,但您可以提交免费支持请求以增加该限制。

您现在可能正在考虑这对您的缓存命中率的影响,因为不同的站点不会共享一个公共缓存。这是一个有道理的担忧,但由于各种原因,影响可能不如您预期的那么大——其中最重要的是 CloudFront 的缓存不是单一的。如果您有来自世界两个不同地区的观看者访问一个分布,那么这些用户几乎肯定会连接到不同的 CloudFront 边缘站点,因此无论如何都会访问不同的缓存实例。

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 2012-04-23
    • 2023-03-06
    • 2014-01-04
    • 2018-04-21
    • 1970-01-01
    • 2021-09-10
    • 2019-02-14
    相关资源
    最近更新 更多