在我的 Amazon CloudFront 分配上配置的原始服务器使用虚拟主机。我想将我的分配配置为将主机标头转发到我的原始服务器。
简短描述
要将您的分配配置为将主机标头转发到原始服务器,请执行以下操作之一:
- 创建缓存策略和原始服务器请求策略。
- 编辑分配中现有行为的设置。
如果为没有自定义域的 Amazon API Gateway 原始服务器创建自定义策略,请不要转发主机标头。否则,您会收到"403 error"。
**重要事项:**对于 Amazon Simple Storage Service (Amazon S3) 原始服务器,CloudFront 不支持基于主机标头的缓存。有关详细信息,请参阅选择缓存所基于的标头。
解决方法
创建缓存策略和源请求策略
完成以下步骤:
- 打开 CloudFront 控制台。
- 在导航窗格中,选择 Policies(策略)。
- 在 Custom policies(自定义策略)部分中,选择 Create cache policy(创建缓存策略)。
- 在 Cache key settings(缓存键设置)下,对于 Headers(标头),选择 Include the following headers(包含以下标头)。
- 从 Add header(添加标头)下拉列表中,选择 Host(主机)。
- 根据您的需求,完成缓存策略的所有其他设置。
- 选择 Create(创建)。
- 将这些策略附加到 CloudFront 分配的相关行为上。
编辑分配中现有行为的设置
完成以下步骤:
- 打开 CloudFront 控制台。
- 选择您的分配。
- 选择 Behaviors(行为)选项卡,然后选择将主机标头转发到的路径。
- 选择 Edit(编辑)。
- 确认 Cache key and origin requests(缓存键和源请求)已设置为 Legacy cache settings(旧缓存设置)。
**注意:**如果未选择 Legacy cache settings(旧缓存设置),请完成上一节中的步骤创建一个缓存策略。
- 在 Legacy cache settings(旧缓存设置)下,对于 Headers(标头),选择 Include the following headers(包含以下标头)。
- 从 Add header(添加标头)菜单中,选择 Host(主机)。
- 选择 Save Changes(保存更改)。
(可选)使用不同的名称转发标头
要使用自定义或其他标头名称转发主机标头值,请使用 CloudFront 函数或 AWS Lambda@Edge 函数。
要使用不同的名称转发标头,请完成以下步骤:
- 检查传入的主机标头。
**注意:**对于 CloudFront 函数,请检查查看器请求事件。对于 Lambda@Edge,请检查查看或源请求事件。
- 要将客户端请求中的主机标头值存储到标头中,请在查看器请求中使用 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
}
**注意:**此示例函数会激活查看器请求事件。
- 要将自定义标头转发到源,请配置缓存策略或主机请求策略,以将 X-Forwarded-Host 标头加入允许列表。有关详细信息,请参阅自定义源的请求和响应行为。
相关信息
根据请求标头缓存内容
使用策略来控制缓存键