6

मेरे पास एक एस 3 बाल्टी है जिस पर क्लाउडफ्रंट सीडीएन है।एस 3/क्लाउडफ्रंट, हेडर के साथ सभी फाइलें "कैश-कंट्रोल: अधिकतम आयु = 365000000, अपरिवर्तनीय"

यह एस 3 बाल्टी "अपरिवर्तनीय" है, जिसका अर्थ है कि एक बार जब मैं वहां एक फ़ाइल अपलोड करता हूं, तो मैं इसे कभी भी हटा या अपडेट नहीं करता हूं। यह तब सुरक्षित है कि सभी क्लाइंट S3/CloudFront से आने वाली फ़ाइलों को बहुत आक्रामक रूप से कैश करते हैं।

वर्तमान में, एटैग बहुत अच्छा काम कर रहे हैं, और ग्राहकों ने अधिकांश समय 304 प्रतिक्रियाएं मारा। लेकिन 304 प्रतिक्रिया प्राप्त करने में अभी भी एक राउंडट्रिप शामिल है जिसे अधिक आक्रामक कैशिंग से बचा जा सकता है।

तो मैं इस व्यवहार को चाहते हैं:

  • CloudFront CDN कैश अवैध कभी नहीं मिलना चाहिए, क्योंकि S3 कैश कभी नहीं बदलता। क्लाउडफ्रंट को एक बार से अधिक बार फ़ाइल के लिए S3 से पूछने की आवश्यकता नहीं है। मुझे लगता है कि मैंने क्लाउडफ्रंट वितरण सेटिंग्स का उपयोग करके सफलतापूर्वक कॉन्फ़िगर किया है।

  • CloudFront (immutable एक नया, 2016 के रूप में आंशिक रूप से समर्थित मूल्य है)

मुझे समझ नहीं आता कि कैसे मैं वांछित परिणाम प्राप्त कर सकते हैं हैडर Cache-Control: max-age=365000000, immutable साथ सभी फाइलों को कार्य करना चाहिए। क्या मुझे क्लाउडफ्रंट या एस 3 स्तर पर इसे संभालना चाहिए? मैंने प्रत्येक S3 फ़ाइल के लिए उपयुक्त शीर्षलेख को कॉन्फ़िगर करने के बारे में कुछ चीज़ें पढ़ी हैं। क्या कस्टम http शीर्षलेख वाली सभी फ़ाइलों को सेवा देने के लिए कोई वैश्विक सेटिंग नहीं है जिसका उपयोग मैं कर सकता था?

उत्तर

13

क्या मुझे क्लाउडफ्रंट या एस 3 स्तर पर इसे संभालना चाहिए?

वर्तमान में क्लाउडफ़्रंट या S3 में कस्टम http शीर्षलेख जोड़ने के लिए कोई वैश्विक सेटिंग नहीं है। ऑब्जेक्ट्स में http शीर्षलेख जोड़ने के लिए, उन्हें बाल्टी में प्रत्येक ऑब्जेक्ट पर व्यक्तिगत रूप से S3 में सेट किया जाना चाहिए। वे ऑब्जेक्ट 'मेटाडाटा में संग्रहीत हैं - और एडब्ल्यूएस एस 3 कंसोल में प्रत्येक ऑब्जेक्ट के लिए मेटाडेटा अनुभाग में पाए जा सकते हैं।

आमतौर पर, बाल्टी को ऑब्जेक्ट जोड़ते समय हेडर सेट करना सबसे आसान है - ऐसा करने के लिए सटीक तंत्र इस बात पर निर्भर करता है कि आप किस क्लाइंट ऐप का उपयोग कर रहे हैं, या एसडीके।

उदा। एडब्ल्यूएस CLI के साथ आप का उपयोग कमान --cache-control option: https://stackoverflow.com/a/22522942/6720449

या आप के लिए एडब्ल्यूएस S3 आदेश का उपयोग कर सकते हैं:

aws s3 cp test.txt s3://mybucket/test2.txt \ 
    --cache-control max-age=365000000,immutable 

मौजूदा वस्तुओं को संशोधित करने के s3cmd उपयोगिता एक modify विकल्प जिसका विवरण तो जवाब है मेटाडेटा को संशोधित करने के लिए ऑब्जेक्ट्स को वापस कॉपी करें, जैसा कि इस SO उत्तर में बताया गया है: https://stackoverflow.com/a/29280730/6720449। जैसे एक बाल्टी में सभी वस्तुओं पर मेटाडाटा को बदलने के लिए:

aws s3 cp s3://mybucket/ s3://mybucket/ --recursive --metadata-directive REPLACE \ 
    --cache-control max-age=365000000,immutable 

CloudFront CDN कैश अवैध मिल कभी नहीं करना चाहिए

यह काफी कठोर आवश्यकता है - आप कभी से एक CloudFront कैश नहीं रोका जा सकता अवैध हो रहा है।यही है, ऐसी कोई सेटिंग नहीं है जो क्लाउडफ़्रंट अमान्यता को बनाए जाने से रोकें, यदि उपयोगकर्ता बनाते हैं तो इसमें पर्याप्त अनुमतियां होती हैं। तो, एक चौराहे के रास्ते में, आप cloudfront:CreateInvalidation आईएएम अनुमति का उपयोग करके वितरण में अमान्यता बनाने के लिए कोई उपयोगकर्ता, भूमिकाएं या समूहों को अनुमति नहीं देकर अमान्यताओं को रोक सकते हैं - यह संभवतः व्यावहारिक नहीं है।

हालांकि, क्लाउडफ़्रंट बैकएंड के कैश-कंट्रोल के उल्लंघन में कैश को अमान्य करने का विकल्प चुन सकता है - उदा। यदि Maximum TTL सेटिंग सेट की गई है और यह अधिकतम आयु से कम है।

+0

धन्यवाद। मैं संशोधित आदेश के साथ जाऊंगा। यदि क्लाउडफ्रंट कभी-कभी इसका आविष्कार करता है तो यह अच्छा नहीं होता है, लेकिन यह कोई बड़ा सौदा नहीं है या तो –

+0

आप बिल्कुल सही हैं कि * "क्लाउडफ्रंट सीडीएन कैश कभी अवैध नहीं होना चाहिए" * बहुत कठोर है। वास्तव में, यह सिर्फ एक उचित उम्मीद नहीं है। एक मोनोलिथिक कैश नहीं है - प्रत्येक किनारे पर एक होता है, और प्रत्येक किनारे किसी ऑब्जेक्ट के लिए अनुरोध को संभालने वाला होता है जो इसे प्रारंभ में मूल रूप से प्राप्त करता है। वस्तुओं को लगातार पहुंच ("लोकप्रियता") की कमी के लिए किसी दिए गए किनारे से भी निकाल दिया जा सकता है। यह एक कैश है ... परिभाषा के अनुसार अस्थिर लेकिन समग्र रूप से बहुत ही संगत। यह भी देखें [क्लाउडफ़्रंट केवल घंटों के भीतर कैश से वस्तुओं को बेदखल क्यों कर रहा है?] (Http://stackoverflow.com/a/32878535/1695906) –

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