如何配置 AWS CloudFront 以根据主机标头值缓存响应?

问题描述 投票:0回答:1

我目前正在使用 AWS CloudFront 将请求分发到应用程序负载均衡器 (ALB),然后应用程序负载均衡器将它们转发到 EC2 实例。我需要根据主机标头值配置缓存。具体来说:

如果 Host 标头是 api.domain.com,我根本不希望 CloudFront 缓存响应。

如果主机标头是 web.domain.com,我希望 CloudFront 将响应缓存 24 小时。

我知道我需要使用缓存行为和缓存策略,但我不确定如何正确设置它们以根据 Host 标头值实现所需的缓存行为。

我是否需要使用 CloudFront-function/lambda-edge-function 修改缓存控制标头,如果需要,该怎么做。

amazon-web-services amazon-cloudfront aws-lambda-edge cloudfront-functions
1个回答
0
投票

如果您使用 2 个不同的域,我会看到以下 2 个选项:

1。使用两种不同的分布

最简单的方法是为每个域创建一个新的发行版

2。使用 Lambda@Edge

 修改 Cache-Control

如果您仍想使用一种发行版,您可能需要通过编写自定义 Lambda@Edge 并将其附加到查看器请求来增加灵活性

这是 Lambda 代码的示例:

'use strict';
exports.handler = (event, context, callback) => {
   const request = event.Records[0].cf.request;
   const headers = request.headers;
   if (headers.host[0].value === 'api.domain.com') {
       request.headers['cache-control'] = [{ key: 'Cache-Control', value: 'no-cache, no-store, must-revalidate' }];
   } else if (headers.host[0].value === 'web.domain.com') {
       request.headers['cache-control'] = [{ key: 'Cache-Control', value: 'max-age=86400' }];
   }
   callback(null, request);
};
© www.soinside.com 2019 - 2024. All rights reserved.