CloudFront को S3 से नवीनतम HTML फ़ाइल से गुजरने के लिए मजबूर करना


13

पृष्ठभूमि

मैं S3 पर एक स्थैतिक साइट की मेजबानी कर रहा हूं, शीर्ष पर CloudFront के साथ। मेरे पास जो समस्या है वह मेरी HTML फ़ाइलों के साथ है।

CloudFront के अकसर किये गए सवाल के अनुसार :

Amazon CloudFront इन कैश कंट्रोल हेडर का उपयोग यह निर्धारित करने के लिए करती है कि उस फ़ाइल के अपडेट किए गए संस्करण के लिए मूल को कितनी बार जांचना है

मैंने अब तक क्या किया है

इसे ध्यान में रखते हुए, मैंने निम्नलिखित हेडर में जोड़ने के लिए अपने S3 बाल्टी में HTML फाइलें सेट की हैं:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Expires: Fri, 01 Jan 1990 00:00:00 GMT

मेरी पहली कॉल पर samplefile.htm, मुझे निम्नलिखित प्रतिक्रिया हेडर दिखाई देते हैं ( Content-Typeबिंदु पर रखने के लिए मैंने स्पष्ट हेडर (जैसे ) को बाहर रखा है :

Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Date:Sat, 10 Dec 2011 14:16:51 GMT
ETag:"a5890ace30a3e84d9118196c161aeec2"
Expires:Fri, 01 Jan 1990 00:00:00 GMT
Last-Modified:Sat, 10 Dec 2011 14:16:43 GMT
Server:AmazonS3
X-Cache:Miss from cloudfront

जैसा कि आप देख सकते हैं, मेरा Cache-Controlहेडर वहां मौजूद है। समस्या यह है, अगर मैं इस फाइल को अपडेट करता हूं और रिफ्रेश करता हूं तो मुझे कैश्ड कंटेंट मिलता है (लेटेस्ट फाइल के बजाय), और मैं देख सकता हूं कि CloudFront अपने कैश्ड वर्जन को रिस्पॉन्स हेडर देखकर सर्व कर रही है:

X-Cache:Hit from cloudfront

सारांश / प्रश्न

उपर्युक्त ध्यान में रखते हुए, मैं CloudFront का उपयोग करते समय नवीनतम HTML की स्वचालित पुनर्प्राप्ति कैसे प्राप्त कर सकता हूं?

इसके अकसर किये गए सवाल के अनुसार मुझे यह कैश-कंट्रोल हेडर के साथ करने में सक्षम होना चाहिए, लेकिन मुझे यह काम नहीं मिल रहा है।

नीचे दिए गए जवाब

अंत में मैंने अपने S3 बाल्टी को सीधे इंगित करने के लिए अपने www CNAME को बदलने का फैसला किया। फिर "स्थिर" नामक एक नया CNAME जोड़ा, जो CloudFront को इंगित करता है।

इसका मतलब यह है कि HTML S3 से प्रत्यक्ष है, जिसके बाद उसके सभी CSS / JS / IMG संदर्भों को static.mydomain.com की ओर इशारा किया गया है

जवाबों:


6

सबसे पहले, क्लाउडफ्रंट की बात कैश्ड कंटेंट को परोसने की है - यदि आप क्लाउडफ्रंट से अनकेच्ड कंटेंट परोसने की कोशिश करते हैं, तो यह S3 से सीधे सेवा देने की तुलना में धीमी है, लगभग सभी मामलों में (स्ट्रीमिंग सामग्री की तरह कुछ अपवाद होगा)। क्लाउडफ्रंट से सामग्री की सेवा के लिए एक पल के लिए क्या करना चाहिए - इसे मूल सर्वर से उस स्थान पर प्राप्त करने की आवश्यकता है जो भौगोलिक रूप से उपयोगकर्ता के करीब है - जिसका अर्थ है कि अनुरोध के लिए जहां क्लाउड सर्वर को मूल सर्वर से सामग्री प्राप्त करना है। , आप अनुरोध में अतिरिक्त विलंबता जोड़ते हैं, और उपयोगकर्ता सामग्री धीमी प्राप्त करता है। यह केवल एक बार सामग्री किनारे स्थान पर उपलब्ध है कि बाद में अनुरोध तेजी से कर रहे हैं।

इस समस्या के लिए सबसे अच्छा तरीका यह है कि जब आप किसी पृष्ठ को अपडेट करते हैं तो अपने फाइलनेम को बदल दें - यह क्लाउडफ्रंट को नई सामग्री को पुनः प्राप्त करने के लिए मजबूर कर देगा। फिर, ध्यान रखें कि Cloudfront का उपयोग आमतौर पर मीडिया फ़ाइलों (छवियों सहित) और शैली / जावास्क्रिप्ट के लिए किया जाता है - और html के लिए इतना नहीं। संभावित रूप से, आपके पास S3 पर आपका HTML होगा, और Cloudfront पर आपकी छवियां - आपके द्वारा किए गए किसी भी परिवर्तन के साथ, आप फ़ाइल का नाम Cloudfront पर बदल सकते हैं (जैसे फ़ाइल- v1.jpg, file-v2.jpg, आदि)। एक अन्य सामान्य तरीका संस्करण जानकारी के साथ एक क्वेरी स्ट्रिंग शामिल है।

इसके अलावा, ध्यान रखें कि Cloudfront gzipped सामग्री की सेवा नहीं करता है - जिसके परिणामस्वरूप एक नियमित सर्वर से धीमी प्रतिक्रिया हो सकती है (हालांकि, आपके मामले में, S3 gzip सक्षम ब्राउज़र की पहचान नहीं करता है)।

अंत में, यदि आप चाहते हैं, तो आप क्लाउडफ्रंट को अपनी मौजूदा प्रतिलिपि को छोड़ने और मूल सर्वर से एक नया लाने के लिए अमान्य का उपयोग कर सकते हैं। ध्यान दें, हालांकि, क्लाउडफ्रंट आपको प्रति माह केवल 1000 मुफ्त अमान्य देता है, जिसके बाद लागत $ 0.005 / अमान्य है।

क्लाउडफ्रंट सबसे कम समय रखेगा सामग्री 1hr है , हालांकि, डिफ़ॉल्ट 210 है। इसलिए मैं अधिकतम आयु को कम से कम 3600 पर सेट करने का प्रयास करूंगा। एक एस-मैक्सेज हेडर (साझा करने के लिए - यानी अनुमानित सामग्री) पर भी विचार करें। अमेज़ॅन इस कैशिंग ट्यूटोरियल की सिफारिश करता है ।

इसके साथ हाल ही में एक समस्या थी , कुछ दिनों पहले सुधार किया गया


S3 के ऊपर CF चिपके रहने का कारण वर्नर वोगल्स ने स्वयं अपने ब्लॉग पोस्ट allthingsdistributed.com/2011/02/website_amazon_s3.html में इसका उल्लेख किया था । जैसा कि आप कहते हैं, मैं s3 से html डायरेक्ट को रूट करने पर विचार कर सकता हूं। एक मामूली नोट: कैश-बस्ट के लिए फाइलों के अंत में एक क्वेरी स्ट्रिंग जोड़ना एक अच्छा विचार नहीं है क्योंकि यह कुछ प्रॉक्सी को कभी भी कैश नहीं कर सकता है।
isNaN1247

यह आदमी हर अपलोड पर अमान्य का उपयोग करने लगता है, जो overkill लगता है jmlacroix.com
isNaN1247

1
क्लाउड स्ट्रिंग के साथ क्वेरी स्ट्रिंग्स काम नहीं करेगा - यह फ़ाइलों को कैश नहीं करेगा, लेकिन वे प्रभावी हो सकते हैं यदि आप अपनी सामग्री को सीधे सेवा देते हैं। S3 से HTML आपकी सबसे अच्छी शर्त होगी। आप निश्चित रूप से हर अपलोड पर सब कुछ अवैध नहीं करना चाहते हैं, लेकिन जो फाइलें बदली हैं, उन्हें अमान्य करना कुछ मामलों में योग्यता के बिना नहीं है। क्लाउडफ्रंट की खूबियाँ केवल भारी ट्रैफ़िक वाली साइटों पर ही प्रासंगिक हो जाती हैं - आपकी औसत साइट के लिए, S3 भी बेहतर प्रदर्शन की पेशकश कर सकता है (उन दोनों को देखें और देखें - विशेष रूप से छोटी वस्तुओं के लिए क्लाउडफ्रंट धीमा हो सकता है)।
साइबरबरी १६

2
क्लाउडफ्रंट अब Gzip कम्प्रेशन का समर्थन करता है। यहां घोषणा
ग्रेग सैडेत्स्की

@ साइबरबरी सीमाएं आजकल भिन्न हैं: The minimum expiration time CloudFront supports is 0 seconds for web distributions and 3600 seconds for RTMP distributions. डॉक्स.समेसनोजेन। एएमज़ोनक्लाउडफ्रंट
एलएटीएस्ट

20

मेरा मानना ​​है कि अब तक के उत्तर सही हैं, अब तारीख से बाहर हैं, क्योंकि क्लाउडफ्रंट अब न्यूनतम टीटीएल 0 का समर्थन करता है, और कैश-आयु = 0 का उपयोग करने का ओपी का मूल प्रयास अब काम करना चाहिए।

आप उन अन्य कैश-कंट्रोल हेडर का उपयोग करना चाहते हैं या नहीं, इस बात पर ध्यान देना चाहते हैं कि क्या वे आपके द्वारा खोजे जा रहे परिणाम का उत्पादन करेंगे - आपको केवल अधिकतम आयु की आवश्यकता हो सकती है। क्या आप शायद चाहते हैं कि क्लाउडफ्रंट S3 की जांच के लिए यह देखने के लिए कि क्या HTML फ़ाइल बदल गई है। यदि यह है, तो Cloudfront नई फ़ाइल ला सकता है और वापस कर सकता है। यदि नहीं, तो यह ग्राहक को उसके मौजूदा कैश (S3 बैंडविड्थ का संरक्षण, और ग्राहक की सेवा तेजी से, और अधिक स्थानीय रूप से) से दे सकता है।

क्लाउडफ्रंट का बिंदु कैश्ड सामग्री परोसना है, हां, लेकिन अब इसमें ऐसी सामग्री शामिल है जो कभी-कभी बदलती है, लेकिन इसे बदला नहीं जा सकता है।

Ps क्वेरी स्ट्रिंग्स भी अब क्लाउडफ्रंट के साथ काम करते हैं (यदि आप संबंधित मूल के लिए एक 'व्यवहार' को कॉन्फ़िगर करते हैं - एक और नई सुविधा), हालांकि कुछ प्रॉक्सी अभी भी क्वेरी स्ट्रिंग के साथ किसी भी फाइल को कैश करने में विफल हो सकते हैं।

अमेज़ॅन डेवलपर गाइड: समाप्ति 1


-1

यह निश्चित नहीं है कि CloudFront हेडर के साथ आपके साथ कैसा व्यवहार करता है, लेकिन यदि आप किसी हेडर को निर्दिष्ट नहीं करते हैं तो ऑब्जेक्ट्स को रिफ्रेश करने का डिफ़ॉल्ट समय 24 घंटे है।

वस्तुओं को ताज़ा करने के लिए आप जिन चीज़ों को कर सकते हैं, उनमें से एक सामग्री को अमान्य करना है। अधिक जानकारी के नीचे दिए गए लिंक को देखें। http://blog.cloudberrylab.com/2010/08/how-to-manage-cloudfront-object.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.