如何设置应用程序以禁止 Cloudfront 获取任何内容?

How to set up app to disallow Cloudfront from fetching anything?

我使用 rails 5.2 和 cloudfront 作为资产

如何设置应用以禁止 Cloudfront 获取资产以外的任何内容?

CloudFront 没有明确的方法来 "allow only" 某些路径前缀,因为如果它们不匹配任何其他路径前缀,它们最终将匹配默认的 * 缓存行为,但是有几个解决这个问题的方法,取决于适合您口味的复杂程度……但所有这些都将从这一步开始:

  • 使用所需的路径模式创建新的缓存行为,例如 /assets/* 和 select 您现有的来源来处理这些请求。

此时,CloudFront 仍然像以前一样工作,它只是在内部考虑资产请求以匹配一种行为,并考虑其他所有内容以匹配另一种行为。

所以,我们接下来需要的是 "other."

最简单的解决方案是使用源域名 invalid.invalid 创建第二个源。这是一个语法上有效的主机名,它指向一个不存在的目标(.invalid TLD 是为此类目的保留的)。

创建此源后,编辑您的默认缓存行为以使用此新源。

随着此更改的实施和传播,CloudFront 将像以前一样处理 /assets/* 请求,但会在任何其他路径上引发错误。 (错误是502 Bad Gateway,如果我没记错的话)

这实现了阻止所有其他请求的简单目的。

如果您想更主动一点,并将请求重定向回主站点,您可以通过在 S3 中创建一个空存储桶和 select "Redirect requests" 选项来实现.在 "target bucket or domain" 框中,输入您的主要网站主机名。然后采用静态网站托管框中显示的 "Endpoint" 并将其用作 CloudFront 中的原始主机名,以实现默认缓存行为。任何到达 CloudFront 的请求(/assets/* 以外的请求都将收到重定向回主站点的请求。

如果您的 CDN 被搜索引擎无意中获取,此选项可能是更好的选择,因为链接将重定向回主站点。