我最近开始使用Amazon S3来为我的访问者提供图片,因为这将减少服务器负载。现在,有一个新的问题:今天我查看了我的AWS账单。我注意到我有一个巨大的账单在等着我-在20天内总共有4 TB的AWS数据传输。
显然这是因为大量的Amazon S3流量(到Cloudflare,然后服务给访问者).现在我应该通过设置缓存头来减少请求的文件数量(因为Cloudflare的爬虫会尊重它).我已经修改了我的代码如下:
$s3->putObjectFile($path, $bucket , 'images/'.$id.'.jpg', S3::ACL_PUBLIC_READ);
到
$s3->putObjectFile($path, $bucket , 'images/'.$id.'.jpg', S3::ACL_PUBLIC_READ, array('Cache-Control' => 'public,max-age=31536000'));
Cloudflare不考虑该高速缓存,因为缓存控制在头中没有显示为“Cache-Control”,而是显示为“x-amz-meta-cachecontrol”。
有人有简单的解决办法吗?
**TL;DR:**我和这个人有差不多的问题:http://support.bucketexplorer.com/topic734.html(那是在2008年)
**编辑:**我偶然发现了这个:Amazon S3 not caching images,但不幸的是,该解决方案不适合我。
**编辑2:**原来它不工作,因为我使用的是旧版本的“Amazon S3 class”。我更新了代码,现在可以工作了。
2条答案
按热度按时间xuo3flqw1#
如果你得到了"x-amz-meta-cachecontrol",很可能你没有正确设置头文件。这可能只是你在代码中做它的确切方式。这 * 是 * 应该工作。我推断这是php使用亚马逊S3 PHP类?
试试这个:
在S3 PHP docs中,
putObjectFile
列在遗留方法下:与此相比:
您需要将cache-control设置为一个request头,但似乎无法使用
putObjectFile
设置请求头,只能使用元头。您必须使用putObject
并为元头提供一个空数组,然后为请求头(包括cache-control)提供另一个数组。您也可以尝试我在下面列出的一些其他工作示例。
另见:
How to set the Expires and Cache-Control headers for all objects in an AWS S3 bucket with a PHP script(php)
Updating caching headers for Amazon S3 and CloudFront(Python)
Set cache-control for entire S3 bucket automatically (using bucket policies?)
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225
vom3gejh2#
现在可以了。转到s3 bucket。打开文件并设置属性