我在 Amazon S3 上托管了一堆照片,还为它们运行了 Amazon CloudFront。此外,我还运行了一个自定义域名。现在,如果有人试图将图像嵌入到另一个网站,我想显示“此图像托管在域 X 上”,而不是实际图像。
我所描述的当前设置可以实现这一点吗?
这是否是一个好主意,实际上不是一个问题,我只需要看看它是否可行。
答案1
Cloudfront 不支持 referrer 标头,因此您无法直接执行此操作。不过,处理热链接的一种方法是生成签名 URL这些 URL 会在短时间内过期。本质上,使用动态页面,您可以将所有 Cloudfront 内容设为私有,然后使用签名 URL 将图像嵌入到您的页面中。签名 URL 授予对内容的访问权限 - 无论是短时间内,还是特定 IP 地址。这实际上使热链接变得不切实际 - 因为有人需要不断爬取您的网站以获取新的有效 URL。当然,这对缓存有影响。或者,您可以将 URL 的有效期设置为一天多一点,然后每天重新生成 URL,而不是每次页面加载时都重新生成。
答案2
如果 CloudFront 支持基于Referer:
标头的请求重写,那么可以。如果不支持,则需要在公共图像和图像之间放置一个支持该功能的 Web 服务器。Apache/nginx 都支持此功能,据我所知,大多数其他服务器也支持此功能。