2012-04-23 7 views
21

हाल ही में मैंने रेल अनुप्रयोग के ढेर में एक वार्निश उदाहरण जोड़ा।कैश-कंट्रोल का उपयोग करके वार्निश और ब्राउजर को कैसे नियंत्रित करें: एक रेल पर्यावरण में अधिकतम आयु हैडर?

Cache-Control: max-age=86400, public=true 

मैं हासिल की है कि एक मेरी नियंत्रकों में expires_in कथन का उपयोग:

def index 
    expires_in 24.hours, public: true 
    respond_with 'some content' 
end 

यही काम किया उस में वार्निश डिफ़ॉल्ट कॉन्फ़िगरेशन एक निश्चित संसाधन कैशिंग तो जैसे कैश-नियंत्रण हैडर का उपयोग करने से आश्वस्त किया जा सकता है कुंआ। मुझे उम्मीद नहीं थी कि कैश-कंट्रोल हेडर ALSO ब्राउज़र को प्रभावित करता है। इससे समस्या होती है कि दोनों - वार्निश और मेरे उपयोगकर्ता ब्राउज़र एक निश्चित संसाधन को कैश करते हैं। संसाधन को वार्निश से सही ढंग से शुद्ध किया गया है, लेकिन ब्राउज़र तब तक अनुरोध करने का प्रयास नहीं करता जब तक कि अधिकतम आयु तक नहीं पहुंच जाती।

तो मुझे गीला लगता है कि मुझे वार्निश के साथ संयोजन में 'expires_in' का उपयोग करना चाहिए? मैं कैश-कंट्रोल हेडर को नर्गिक्स या अपाचे इंस्टेंस में वार्निश के सामने फ़िल्टर कर सकता हूं, लेकिन यह अजीब लगता है।

क्या कोई मुझे प्रबुद्ध कर सकता है?

सादर फेलिक्स

+0

मैं एक ही समस्या में भाग रहा हूं। क्या आपको अभी तक कोई समाधान मिला है? – MotoTribe

+0

नीचे मेरी टिप्पणी देखें। – GeorgieF

उत्तर

12

वास्तव में एक बहुत अच्छा और वैध सवाल है, और रिवर्स प्रॉक्सी के साथ एक बहुत ही आम है कि।

समस्या यह है कि केवल एक कैश-नियंत्रण संपत्ति है और यह क्लाइंट ब्राउज़र (निजी कैश) और/या प्रॉक्सी सर्वर (साझा कैश) के लिए है। यदि आप अपनी पार्टी को पूरी तरह से कैश करने के लिए तृतीय पक्ष प्रॉक्सी नहीं चाहते हैं, और अपने वार्निश (या अपने रेल बैकएंड द्वारा) द्वारा हर अनुरोध की सेवा करना चाहते हैं, तो आपको वार्निश से उचित कैश-कंट्रोल हेडर भेजना होगा।

संशोधित कैश नियंत्रण हेडर बैकएंड द्वारा भेजे गए https://www.varnish-cache.org/trac/wiki/VCLExampleLongerCaching

पर विस्तार से चर्चा की है आप दो विभिन्न कोणों से समाधान संपर्क कर सकते हैं। यदि आप अपने रेल बैकएंड पर अधिकतम आयु को परिभाषित करना चाहते हैं, उदाहरण के लिए विभिन्न ऑब्जेक्ट्स के लिए अलग-अलग टीटीएल निर्दिष्ट करने के लिए, आप उपरोक्त लिंक में वर्णित विधि का उपयोग कर सकते हैं।

एक और समाधान बैकएंड से कैश-कंट्रोल हेडर नहीं भेजना है, और इसके बजाय वार्निश vcl_fetch() में ऑब्जेक्ट्स के लिए वांछित टीटीएल को परिभाषित करना है। यह वह दृष्टिकोण है जिसे हमने लिया है।

हमारे पास वार्निश में 600 सेकंड का डिफ़ॉल्ट टीटीएल है, और पृष्ठों के लिए लंबे टीटीएल को परिभाषित करता है जो परिवर्तन किए जाने पर निश्चित रूप से स्पष्ट रूप से शुद्ध हो जाते हैं।

sub vcl_fetch { 
    if (req.http.Host ~ "(forum|discus)") { 
    # Forum pages are purged explicitly, so cache them for 48h 
    set beresp.ttl = 48h; 
    } 

    if (req.url ~ "^/software/") { 
    # Software pages are purged explicitly, so cache them for 48h 
    set beresp.ttl = 48h; 
    } 

    if (req.url ~ "^/search/forum_search_results") { 
    # We don't want forum search results to be cached for longer than 5 minutes 
    set beresp.ttl = 300s; 
    } 

    if(req.url == "/robots.txt") { 
    # Robots.txt is updated rarely and should be cached for 4 days 
    # Purge manually as required 
    set beresp.ttl = 96h; 
    } 

    if(beresp.status == 404) { 
    # Cache 404 responses for 15 seconds 
    set beresp.http.Cache-Control = "max-age=15"; 
    set beresp.ttl = 15s; 
    set beresp.grace = 15s; 
    } 
} 

हमारे मामले में हम कैश नियंत्रण हेडर पर सभी वेब बैकएंड सर्वर पर नहीं भेजते हैं: यहाँ हमारे वर्तमान vcl_fetch() परिभाषा है।

+3

विस्तृत उत्तर के लिए धन्यवाद। हमने कैश-कंट्रोल हेडर को बस बदलकर समस्या हल की: कैश-कंट्रोल: अधिकतम आयु = 0 एस-मैक्सेज = 86400, सार्वजनिक = सत्य ताकि ब्राउज़र संसाधन को कैश न करे लेकिन वार्निश डू जैसे साझा कैश। क्या वह गलत है? – GeorgieF

+4

आप एस-मैक्सेज का भी उपयोग कर सकते हैं। हालांकि यदि आपके उपयोगकर्ता एक पारदर्शी प्रॉक्सी (कुछ आईएसपी अभी भी उनका उपयोग करते हैं) के पीछे बैठते हैं, तो वे 24 घंटे तक कैश किए गए संस्करण को भी देखेंगे। यदि यह वांछित है, तो एस-मैक्सेज का उपयोग किया जा सकता है। यदि नहीं, तो आपको अपने वीसीएल में प्रतिक्रिया से कैश-कंट्रोल हेडर को परेशान करना चाहिए। मैं एस-मैक्सेज का उल्लेख करने के लिए भी अपना उत्तर संपादित करूंगा।इसके बारे में आपकी जानकारी के लिए – Ketola

+0

Thx। हम निश्चित रूप से इसे पुनः प्रतिक्रिया देंगे और आपके समाधान के अनुसार बदल देंगे। वास्तव में – GeorgieF

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