php 如何降低数据传输成本?Amazon S3 -->Cloudflare -->Visitor

3pvhb19x  于 2023-02-18  发布在  PHP
关注(0)|答案(2)|浏览(122)

我最近开始使用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”。我更新了代码,现在可以工作了。

xuo3flqw

xuo3flqw1#

如果你得到了"x-amz-meta-cachecontrol",很可能你没有正确设置头文件。这可能只是你在代码中做它的确切方式。这 * 是 * 应该工作。我推断这是php使用亚马逊S3 PHP类?
试试这个:

$s3->putObject(file_get_contents($path), $bucket, $url, S3::ACL_PUBLIC_READ, array(), array('Cache-Control' => 'max-age=31536000, public'));

S3 PHP docs中,putObjectFile列在遗留方法下:

putObjectFile (string $file, 
               string $bucket, 
               string $uri, 
               [constant $acl = S3::ACL_PRIVATE], 
               [array $metaHeaders = array()], 
               [string $contentType = null])

与此相比:

putObject (mixed $input, 
           string $bucket, 
           string $uri, 
           [constant $acl = S3::ACL_PRIVATE], 
           [array $metaHeaders = array()], 
           [array $requestHeaders = array()])

您需要将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

vom3gejh

vom3gejh2#

现在可以了。转到s3 bucket。打开文件并设置属性

相关问题