Amazon Cloudfront专用分发 - 指向CSS内部的图像

时间:2012-08-23 15:26:45

标签: php amazon-s3 amazon-web-services amazon-cloudfront

我在Cloudfront中创建了一个私有分发以防止热链接。我设法使用签名URL创建指向我的对象的链接,现在工作正常。

我唯一担心的是,我的css样式表中的图片链接无效,因为它们没有签名。所以如果我有,例如:

background-image: url('../img/bg.png');

由于样式表不包含已签名的网址,因此背景图片不会显示,因此,Cloudfront拒绝提供内容。

我能做些什么来阻止这种情况吗?

6 个答案:

答案 0 :(得分:5)

让我退后一步,问一个基本问题:你是否真的担心人们会将你的图片链接起来? 真的吗?如果有人这样做,它会对你产生什么样的现实影响? 真的?

如果您有正当理由阻止人们进行热链接,那么我不确定任何 CDN服务(在这种情况下,CloudFront)是适合您的解决方案。

嘿,我只是诚实......

答案 1 :(得分:1)

有几种方法,每种都有缺点。

而不是静态CSS文件,您可以从模板(或其他一些智能方式将资源映射到CloudFront位置)生成它。您可以使用Last-Modified和max-age Cache标头在此处使用某种程度的缓存。最难的解决方案,但可以说是最好的保护。

为所有CSS资源设置重定向路径,基本上是一个重写CF路径的小脚本(注意只重写CSS资源而不重写其他内容)。这允许您保留当前的静态CSS,但会打开重定向脚本的潜在热链接。

介于两者之间的内容可能是生成静态CSS文件的cron脚本,其链接在1.5d内到期)以减少服务器负载。

答案 2 :(得分:1)

对你的css文件使用私有发行版通常是一个非常糟糕的主意,因为在css url中添加(可能是不断变化的)到期时间和签名会阻止浏览器缓存它们,因此大大降低了在第一次使用Cloudfront时的实用性的地方。

即使你使用了很长的过期时间,那么拼命想要将你的css背景图像热链接的人只需设置一个脚本来抓取你的css文件并从那里提取图像网址。

答案 3 :(得分:0)

你可以每天或每两天轮换整个CDN主机名,然后你不必更改css中的任何内容(假设css在CDN上,从示例中看起来像)

http://www.explainthatstuff.com/blocking-cloudfront-hotlinks.html

然后您的CSS不需要签名的网址,您仍然可以有效地阻止热链接。

答案 4 :(得分:0)

我刚刚听说过将base64编码转换为html / css。有利有弊,但它可能是你想要的: Is embedding background image data into CSS as Base64 good or bad practice?

答案 5 :(得分:-1)

如何在yr html中使用<base>标记? 虽然没有尝试,但可能有所帮助。

另一种选择是使用php生成样式表。例如,您获取所有图像的签名URL,然后将它们作为变量推送到样式元素。