2012-12-14 9 views
10

私は最近Amazon S3を使用して訪問者にイメージを提供し始めました。これはサーバー負荷を軽減するためです。今、新しい問題があります:今日私はAWS請求書を調べました。私は、私が待っている膨大な請求書を持っていることに気付きました。20日間で合計4TBのAWSデータ転送が行われました。データ転送のコストを削減するにはどうすればよいですか? Amazon S3 - > Cloudflare - > Visitor

これは明らかに、Amazon S3の送信トラフィックが多い(Cloudflareに送信されて訪問者に配信される)ためです。今度は、(クラウドフレアのクローラーはそれを尊重するので)キャッシュヘッダーを設定することによって、要求されたファイルの量を減らす必要があります。それでも、それは動作しません

$s3->putObjectFile($path, $bucket , 'images/'.$id.'.jpg', S3::ACL_PUBLIC_READ, array('Cache-Control' => 'public,max-age=31536000')); 

$s3->putObjectFile($path, $bucket , 'images/'.$id.'.jpg', S3::ACL_PUBLIC_READ); 

:私はこのような私のコードを変更しました。 Cache-Controlはヘッダーに "Cache-Control"として表示されず、代わりに "x-amz-meta-cachecontrol"として表示されるため、Cloudflareはキャッシュを尊重しません。 Cloudflareはこれを無視します。

誰にでも簡単な解決策がありますか?

TL; DR:私はこの男のように、多かれ少なかれ、同じ問題があります。http://support.bucketexplorer.com/topic734.html(それは2008年だった)

EDIT:を私はこのつまずいていますAmazon S3 not caching images残念ながらその解決策はしていません私のために働く。

EDIT 2:「Amazon S3クラス」の古いバージョンを使用していたため、正しく動作しませんでした。私は更新し、コードは今動作します。

ありがとうございます。

答えて

4

「x-amz-meta-cachecontrol」を取得している場合は、ヘッダーを正しく設定していない可能性があります。それはあなたのコードでそれをやっている正確な方法かもしれません。このです。私はこれがAmazon S3 PHPクラスを使用してPHPであると推測していますか?

このお試しください:S3 PHP docsputObjectFile

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

レガシーメソッドの下に表示されます。

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()]) 

あなたは、キャッシュ制御を設定する必要がありますがa 要求ヘッダーですが、apという要求ヘッダーを設定する方法はなく、メタヘッダーのみです。 putObjectを使用し、それにメタヘッダーのための空の配列を与え、次に要求ヘッダー(キャッシュ制御を含む)を持つ別の配列を与える必要があります。

また、私が下に挙げた他の作業例を試すこともできます。

も参照してください:

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(パイソン)

Set cache-control for entire S3 bucket automatically (using bucket policies?)

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225

+0

なぜ動作しないのか分かりました。私は、「Amazon S3 PHP Class」の古いバージョンを使用していたことが分かります。私はあなたの提案されたコードを更新し、使用しました、そして、新しいファイルはキャッシュコントロールセットを持っています。すばらしいです! もう一つのリンクを見て、すでにバケットに入っているファイルのCache-Controlヘッダーをすべて設定します。 これは私のすべての問題を解決するはずです。すべてありがとう! –

+0

@Jonas:このアプローチの後にデータ転送を減らすことができましたか?私はかなり長いことを知っていますが、私は今あなたのボートにいます。 –

1

あなたができるようになりました。 s3バケットに移動します。ファイルを開いてプロパティを設定します。

Aws console

+0

ニースが見つかりました!更新していただきありがとうございます。 –

関連する問題