我目前正在使用 AWS CloudFront 将请求分发到应用程序负载均衡器 (ALB),然后应用程序负载均衡器将它们转发到 EC2 实例。我需要根据主机标头值配置缓存。具体来说:
如果 Host 标头是 api.domain.com,我根本不希望 CloudFront 缓存响应。
如果主机标头是 web.domain.com,我希望 CloudFront 将响应缓存 24 小时。
我知道我需要使用缓存行为和缓存策略,但我不确定如何正确设置它们以根据 Host 标头值实现所需的缓存行为。
我是否需要使用 CloudFront-function/lambda-edge-function 修改缓存控制标头,如果需要,该怎么做。
如果您使用 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);
};