如何配置 Cloudfront 自定义缓存策略以考虑除一个参数之外的所有查询参数

How to configure Cloudfront Custom Cache Policy to consider all query parameters except one

我有一个 AWS Elastic Beanstalk 实例处理来自我的应用程序的搜索查询,还有一个 AWS CloudFront 实例缓存重复查询因为如果 CloudFront 可以满足请求而不是 Elastic Beanstalk

,它的成本会低很多

目前,CloudFront 行为使用旧版缓存设置 选项并设置为包括所有查询字符串。这是需要的,因为这是搜索查询的地方

例如

?license1=licensekey&type=release&query=reid:12345564 AND src=22&limit=1&offset=0

但请注意,我有一个名为 license1 的参数,我希望它忽略此参数,以便两个具有不同许可证密钥的查询

?license1=123456&type=release&query=reid:12345564 AND src=22&limit=1&offset=0
?license1=i979798&type=release&query=reid:12345564 AND src=22&limit=1&offset=0

都将从 Cloudfront 检索相同的缓存元素,但目前我只是将它设置为每个人的相同值,因为我不知道如何执行此操作。 license1 字段只有 ElasticBeanstalk 感兴趣我希望 CloudFront 忽略它。

我正在查看 Create Custom Cache Policy 选项,它有一个附加选项 Include all query strings except 我是希望我可以忽略 license1 参数,但我不确定这种方式是否有效,我不明白我必须在此处输入什么作为查询字符串。

我已经解决了这个问题

  • 创建一个策略以用作 缓存策略 select 包括除选项 之外的所有 查询字符串并添加 license1 字段到阻止列表

  • 创建另一个策略用作 源请求策略,这决定了 CloudFront 未命中时发送到服务器的内容。如果未指定,它将使用 缓存策略 并因此删除我们不需要的 license1 字段,因此对于这个我们设置 查询字符串 - All

  • 然后我们在 CloudFront 实例中同时使用两者

然后我还临时启用了 CloudFront 中的标准日志记录,并进行了一些测试,以确保如果实际搜索查询相同,包含来自不同用户的具有不同值的 license1 仍然允许命中。这有点令人困惑,因为 CloudFront 日志显示包含 license1 的 url 尽管被 CloudFront 忽略,但它按预期工作

而且我还检查了服务器以确保在 CloudFront 出错时 license1 值通过。