跳至内容

如何将 CloudFront 配置为将主机标头转发到原始服务器?

1 分钟阅读
0

在我的 Amazon CloudFront 分配上配置的原始服务器使用虚拟主机。我想将我的分配配置为将主机标头转发到我的原始服务器。

简短描述

要将您的分配配置为将主机标头转发到原始服务器,请执行以下操作之一:

  • 创建缓存策略和原始服务器请求策略。
  • 编辑分配中现有行为的设置。

如果为没有自定义域的 Amazon API Gateway 原始服务器创建自定义策略,请不要转发主机标头。否则,您会收到"403 error"。

**重要事项:**对于 Amazon Simple Storage Service (Amazon S3) 原始服务器,CloudFront 不支持基于主机标头的缓存。有关详细信息,请参阅选择缓存所基于的标头

解决方法

创建缓存策略和源请求策略

完成以下步骤:

  1. 打开 CloudFront 控制台
  2. 在导航窗格中,选择 Policies(策略)。
  3. Custom policies(自定义策略)部分中,选择 Create cache policy(创建缓存策略)。
  4. Cache key settings(缓存键设置)下,对于 Headers(标头),选择 Include the following headers(包含以下标头)。
  5. Add header(添加标头)下拉列表中,选择 Host(主机)。
  6. 根据您的需求,完成缓存策略的所有其他设置。
  7. 选择 Create(创建)。
  8. 将这些策略附加到 CloudFront 分配的相关行为上

编辑分配中现有行为的设置

完成以下步骤:

  1. 打开 CloudFront 控制台
  2. 选择您的分配。
  3. 选择 Behaviors(行为)选项卡,然后选择将主机标头转发到的路径。
  4. 选择 Edit(编辑)。
  5. 确认 Cache key and origin requests(缓存键和源请求)已设置为 Legacy cache settings(旧缓存设置)。
    **注意:**如果未选择 Legacy cache settings(旧缓存设置),请完成上一节中的步骤创建一个缓存策略。
  6. Legacy cache settings(旧缓存设置)下,对于 Headers(标头),选择 Include the following headers(包含以下标头)。
  7. Add header(添加标头)菜单中,选择 Host(主机)。
  8. 选择 Save Changes(保存更改)。

(可选)使用不同的名称转发标头

要使用自定义或其他标头名称转发主机标头值,请使用 CloudFront 函数AWS Lambda@Edge 函数

要使用不同的名称转发标头,请完成以下步骤:

  1. 检查传入的主机标头。
    **注意:**对于 CloudFront 函数,请检查查看器请求事件。对于 Lambda@Edge,请检查查看或源请求事件
  2. 要将客户端请求中的主机标头值存储到标头中,请在查看器请求中使用 Lambda 的 function handler 命令。
    **注意:**例如,如果传入的主机标头为 host,请添加一个具有相同值的新标头。请参阅以下代码示例:
    function handler(event) {    const request = event.request;
        const headers = request.headers;
        const host = request.headers.host.value;
        headers['x-forwarded-host'] = { "value": host }
        return request
    }
    **注意:**此示例函数会激活查看器请求事件。
  3. 要将自定义标头转发到源,请配置缓存策略或主机请求策略,以将 X-Forwarded-Host 标头加入允许列表。有关详细信息,请参阅自定义源的请求和响应行为

相关信息

根据请求标头缓存内容

使用策略来控制缓存键