2017-08-17 12 views
6

पर index.html को कैश नहीं करना है मेरे पास एक S3 बाल्टी पर एक रिएक्ट ऐप होस्ट किया गया है। कोड को yarn build (यह एक क्रिएट-रिएक्ट-एप आधारित ऐप है) का उपयोग करके छोटा किया गया है। build फ़ोल्डर लग रहा है कि:क्लाउडफ्रंट को कैसे S3 बाल्टी

build 
├── asset-manifest.json 
├── favicon.ico 
├── images 
│   ├── map-background.png 
│   └── robot-icon.svg 
├── index.html 
├── js 
│   ├── fontawesome.js 
│   ├── packs 
│   │   ├── brands.js 
│   │   ├── light.js 
│   │   ├── regular.js 
│   │   └── solid.js 
│   └── README.md 
├── service-worker.js 
└── static 
    ├── css 
    │   ├── main.bf27c1d9.css 
    │   └── main.bf27c1d9.css.map 
    └── js 
     ├── main.8d11d7ab.js 
     └── main.8d11d7ab.js.map 

मैं कभी नहीं चाहते index.html कैश हो जाने की, अगर मैं कोड को अद्यतन (अपडेट करने के लिए main.*.js में हेक्स प्रत्यय के कारण), मैं उपयोगकर्ता की अगली यात्रा की जरूरत है क्योंकि पर लेने के लिए अद्यतन कोड को इंगित करने के लिए <script src>index.html में परिवर्तन।

क्लाउडफ्रंट में, मैं केवल पथ को बाहर करने के लिए प्रतीत होता हूं, और "/" को छोड़कर ठीक से काम नहीं कर रहा है। मुझे अजीब व्यवहार मिल रहा है जहां मैं कोड बदलता हूं, और यदि मैं रीफ्रेश करता हूं, तो मैं इसे देखता हूं, लेकिन अगर मैं क्रोम छोड़ देता हूं और वापस जाता हूं, तो मुझे किसी कारण से बहुत पुराना कोड दिखाई देता है।

मैं प्रत्येक कोड रिलीज (कोडबिल्ड के माध्यम से) पर एक अमान्यता को ट्रिगर नहीं करना चाहता हूं। क्या कोई और रास्ता है? मुझे लगता है कि यह चुनौतियों में से एक है कि चूंकि यह रिएक्ट राउटर का उपयोग कर एक ऐप है, इसलिए मुझे त्रुटि दस्तावेज़ को index.html पर सेट करके और 403 के बजाय HTTP स्थिति 200 को मजबूर कर कुछ ट्रिकरी करना पड़ रहा है।

उत्तर

5

यदि आप कभी नहीं चाहते कैश किए जाने के लिए index.html, उस फ़ाइल पर केवल Cache-Control: max-age=0 शीर्षलेख सेट करें। क्लाउडफ्रंट आपके मूल S3 बाल्टी को पर प्रत्येक अनुरोध पर वापस अनुरोध करेगा, लेकिन ऐसा लगता है कि यह वांछित व्यवहार है।

आप लंबे समय तक की अवधि समाप्त होने के समय निर्धारित करने और मैन्युअल CloudFront कैश रद्द करने के लिए चाहते हैं, तो आपको अपने अमान्यकरण पथ के रूप में एक * या /* उपयोग कर सकते हैं (जैसा कि आप का उल्लेख किया है नहीं /)। यद्यपि आपके मूल में परिवर्तनों को प्रतिबिंबित करने के लिए दुनिया भर के सभी क्लाउडफ्रंट एज नोड्स में 15 मिनट तक लग सकते हैं।

+0

और क्या आप उस शीर्षलेख को S3 ऑब्जेक्ट मेटाडेटा में जोड़ने के बारे में बात कर रहे हैं? और यूआरएल पथ पर ध्यान दिए बिना, मैं index.html कैश्ड कभी नहीं चाहता। मैं संबंधित फाइलों को कैश करने के बारे में अधिक चिंतित हूं (जेएस फाइलें, सीएसएस, छवियां)। – ffxsam

+0

हां: इसे एडब्लूएस दस्तावेज में 'सिस्टम-डिफ़ाइंड मेटाडाटा' के रूप में जाना जाता है: http://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-object-metadata.html –

+2

ग्रेट, यह है उपयोगी! इंडेक्स फ़ाइल पर प्रतिलिपि करते समय मैंने 'aws s3 cp --cache-control max-age = 0' का उपयोग करने के लिए अपनी तैनाती प्रक्रिया स्थापित की है। एक जादू की तरह काम करता है। – ffxsam

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