2012-12-14 2 views
10

최근 Amazon S3를 사용하여 내 방문자에게 이미지를 제공하기 시작 했으므로 서버로드가 줄어들었기 때문입니다. 이제 새로운 문제가 있습니다. 오늘 AWS 청구서를 살펴 보았습니다. 나는 나를 기다리고있는 거대한 청구서를 발견했습니다. 20 일 동안 총 4TB의 AWS 데이터 전송이있었습니다.데이터 전송 비용을 어떻게 줄일 수 있습니까? Amazon S3 -> Cloudflare -> 방문자

분명히 이것은 나가는 아마존 S3 트래픽 (클라우드 플레어로가는 방문자에게 보내는 트래픽)이 많기 때문입니다. 이제 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 : I이 더 많거나 적은이 사람과 같은 문제 : http://support.bucketexplorer.com/topic734.html (즉 2008 년이었다)

편집 : 나는이 우연히 한 : Amazon S3 not caching images하지만 솔루션을하지 않는 불행하게도 나를 위해 일해.

EDIT 2 : 이전 버전의 "Amazon S3 클래스"를 사용했기 때문에 제대로 작동하지 않습니다. 내가 업데이 트와 코드는 지금 작동합니다.

감사합니다.

답변

4

"x-amz-meta-cachecontrol"이 표시되면 헤더를 올바르게 설정하지 않았을 가능성이 큽니다. 코드에서 코드를 수행하는 정확한 방법 일 수 있습니다. 이 입니다. 아마존 S3 PHP 클래스를 사용하여 PHP를 추론하고 있습니까?

이 시도 :

S3 PHP docs putObjectFile에서
$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()]) 

을 당신은 같은 캐시 제어를 설정해야 요청은 헤더이지만 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

니스 찾기! 업데이트 주셔서 감사합니다. –

관련 문제