12

サーバーの負荷が軽減されるため、最近、Amazon S3 を使用して訪問者に画像を提供し始めました。ここで、新たな問題が発生しました。今日、AWS の請求を調べました。多額の請求書が待っていることに気付きました.20 日間で合計 4TB の 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'));

それでも、うまくいきません。Cache-Control がヘッダーに「Cache-Control」として表示されず、代わりに「x-amz-meta-cachecontrol」として表示されるため、Cloudflare はキャッシュを尊重しません。Cloudflare はこれを無視します。

誰もこれに対する簡単な解決策を持っていますか?

TL;DR:私は多かれ少なかれこの男と同じ問題を抱えています: http://support.bucketexplorer.com/topic734.html (2008 年)

編集:私はこれに出くわしました: Amazon S3は画像をキャッシュしていませんが、残念ながらその解決策は私にとってはうまくいきません.

編集 2:「Amazon S3 クラス」の古いバージョンを使用していたため、機能しなかったことが判明しました。更新したところ、コードが機能するようになりました。

お時間をいただきありがとうございます。

4

2 に答える 2

5

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

これを試して:

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

S3では 、 PHPドキュメント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をリクエストヘッダーとして設定する必要がありますがputObjectFile、メタヘッダーのみを使用してリクエストヘッダーを設定する方法はないようです。putObjectメタヘッダー用の空の配列を使用して指定し、次にリクエストヘッダー(キャッシュ制御を含む)を含む別の配列を指定する必要があります。

以下にリストした他の実用的な例のいくつかを試すこともできます。

参照:

PHPスクリプト(php)を使用してAWSS3バケット内のすべてのオブジェクトのExpiresヘッダーとCache-Controlヘッダーを設定する方法

Amazon S3およびCloudFront (python)のキャッシュヘッダーを更新する

S3バケット全体のキャッシュ制御を自動的に設定します(バケットポリシーを使用しますか?)

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

于 2013-01-20T12:05:12.413 に答える