2012-12-14 7 views
10

मैंने हाल ही में अपने आगंतुकों को छवियों की सेवा के लिए अमेज़ॅन एस 3 का उपयोग शुरू किया क्योंकि इससे सर्वर लोड कम हो जाएगा। अब, एक नई समस्या है: आज मैंने अपने एडब्ल्यूएस बिलिंग में देखा। मैंने देखा कि मेरे पास एक बड़ा बिल है जो मेरे लिए इंतज़ार कर रहा है - 20 दिनों में कुल 4TB एडब्ल्यूएस डाटा ट्रांसफर रहा है।मैं अपनी डेटा स्थानांतरण लागत को कैसे कम कर सकता हूं? अमेज़ॅन एस 3 -> क्लाउडफ्लेयर -> विज़िटर

स्पष्ट रूप से ऐसा इसलिए है क्योंकि आउटगोइंग अमेज़ॅन एस 3 यातायात की उच्च मात्रा (क्लाउडफ्लेयर में जो तब आगंतुकों को प्रदान करता है)। अब मुझे कैश हेडर सेट करके अनुरोधित फ़ाइलों की मात्रा को कम करना चाहिए (चूंकि क्लाउडफ्लारे का क्रॉलर इसका सम्मान करेगा)। मैं इस तरह मेरे को संशोधित किया है:

$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')); 

फिर भी, यह काम नहीं करता। क्लाउडफ्लेयर कैश का सम्मान नहीं करता है क्योंकि कैश-कंट्रोल हेडर में "कैश-कंट्रोल" के रूप में दिखाई नहीं देता है बल्कि इसके बजाय "x-amz-meta-cachecontrol"। क्लाउडफ्लारे इसे अनदेखा करता है।

क्या किसी के पास इसका आसान समाधान है?

टी एल; डॉ: मेरे पास है और अधिक या कम इस आदमी के रूप में एक ही समस्या: http://support.bucketexplorer.com/topic734.html (कि 2008 में था)

संपादित करें: मैं इस पर ठोकर खाई है Amazon S3 not caching images लेकिन दुर्भाग्य है कि समस्या का समाधान नहीं करता है मेरे लिए काम।

संपादित 2: बाहर निकलता है यह काम नहीं करता क्योंकि मैं "अमेज़ॅन एस 3 कक्षा" का पुराना संस्करण उपयोग कर रहा था। मैंने अपडेट किया और कोड अब काम करता है।

आपके समय के लिए धन्यवाद।

उत्तर

4

यदि आपको "x-amz-meta-cachecontrol" मिल रहा है, तो संभवतः आप हेडर सही तरीके से सेट नहीं कर रहे हैं। यह आपके कोड में यह सही तरीका हो सकता है। यह काम करना चाहिए। मैं अमेज़ॅन एस 3 PHP कक्षा का उपयोग कर php को कम कर रहा हूँ? यह करने के लिए की तुलना करें

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

:

इस प्रयास करें:

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

S3 PHP docsputObjectFile में विरासत पद्धतियों के अंतर्गत सूचीबद्ध है

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

आप के रूप में कैश-नियंत्रण स्थापित करने की आवश्यकता अनुरोध शीर्षलेख, लेकिन एपी नाशपाती है कि putObjectFile, केवल मेटा हेडर के साथ अनुरोध शीर्षलेख सेट करने का कोई तरीका नहीं है। आपको 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

मैं पता लगा क्यों यह काम नहीं किया खोलें। बाहर निकलता है मैं "अमेज़ॅन एस 3 PHP कक्षा" के पुराने संस्करण का उपयोग कर रहा था। मैंने आपके सुझाए गए कोड को अपडेट और इस्तेमाल किया, और अब नई फाइलों में कैश-कंट्रोल सेट है। महान! मैं बाल्टी में मौजूद फ़ाइलों के लिए सभी कैश-कंट्रोल हेडर सेट करने के लिए आपके दूसरे लिंक को भी देखूंगा। यह मेरी सभी समस्याओं को हल करना चाहिए। सबके लिए धन्यवाद! –

+0

@ जोनास: क्या आप इस दृष्टिकोण के बाद अपने डेटा ट्रांसफर को कम करने में सक्षम थे? .. मुझे इसकी काफी लंबी जानकारी है .. लेकिन अब मैं आपकी नाव में हूं। –

1

अब आप कर सकते हैं। एस 3 बाल्टी पर जाएं। फ़ाइल और गुण सेट

Aws console

+0

अच्छा लगता है! अद्यतन के लिए धन्यवाद। –

संबंधित मुद्दे