如何设置应用程序以禁止 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 被搜索引擎无意中获取,此选项可能是更好的选择,因为链接将重定向回主站点。
我使用 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 被搜索引擎无意中获取,此选项可能是更好的选择,因为链接将重定向回主站点。