Ubuntu चल रहे सर्वर पर nginx + Apache के एक गुच्छा पर कैशिंग कॉन्फ़िगर किया गया। मैं कुछ बारीकियों के साथ साझा करना चाहूंगा जिनके साथ मुझे काम की प्रक्रिया में सामना करना पड़ा। और nginx के लिए ssi निर्देश प्रदर्शित करने और भाषा कुकीज़ के आधार पर कैश साझा करने की समस्या है।
Nginx पर परदे के पीछे का उपयोग करते हुए एसएसआई प्रदर्शित करने में समस्याएं
मैंने डायनामिक ब्लॉक प्रदर्शित करने के लिए ssi का उपयोग करने का निर्णय लिया। स्थानीय मशीन पर, सब कुछ ठीक काम करता है, लेकिन ssi सर्वर पर अपलोड होने के बाद, ब्लॉक संसाधित नहीं किए गए थे।
एक प्रॉक्सी वेब सर्वर के रूप में, अपाचे का उपयोग किया जाता है। प्रयोगों की एक श्रृंखला के बाद, मैंने पाया कि फास्टैगी का उपयोग करते समय, एससीआई ब्लॉकों को पूरी तरह से संसाधित किया गया था। यही है, समस्या अपाचे प्रॉक्सी सर्वर में है।
उन्होंने स्थानीय मशीन और सर्वर पर अपाचे हेडर का विश्लेषण करना शुरू किया:
$curl -I http://apache_host:port
एक दिलचस्प शीर्षक पर ध्यान नहीं दिया
Vary: Accept-Encoding
यहां एक विवरण मिला। यही है, मैं संपीड़न सेट करने के लिए हेडर भेज सकता हूं:
$curl -I -H 'Accept-Encoding: gzip,deflate' http://apache_host:port ... Content-Encoding: gzip ...
यही है, प्रॉक्सी सर्वर ने एक संकुचित रूप में सामग्री दी और nginx ssi निर्देशों को पार्स नहीं कर सका।
अपाचे पर संपीड़न के लिए, mod_deflate जिम्मेदार है। इस मॉड्यूल को अक्षम करके इसका इलाज किया जा सकता है:
$a2dismod deflate Module deflate disabled. Run '/etc/init.d/apache2 restart' to activate new configuration! $/etc/init.d/apache2 restart
भाषा कैश पृथक्करण की स्थापना
मेरे द्वारा सेट की गई साइट पर, भाषा कुकीज़ का उपयोग करके सेट की गई है, अर्थात, कोई अद्वितीय URL नहीं हैं (यह SEO :) के लिए पहले से ही है)।
विभिन्न भाषाओं के लिए कैश को विभाजित करने के लिए, मैंने कुंजी का उपयोग किया:
proxy_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri|$lang";
अंतिम पैरामीटर $ लैंग पर ध्यान दें। इसे स्थापित करने के लिए, मैंने ngx_http_map_module का उपयोग किया:
map $http_accept_language $browser_lang { default en; ~ru ru; ~da da; ~de de; } map $cookie_name_of_language_cookie $lang { default $browser_lang; ~en en; ~de de; ~ru ru; ~da da; } server { ........... }
पहला निर्देश ब्राउज़र की भाषा को परिभाषित करता है और फिर दूसरे में भाषा कुकी की अनुपस्थिति में डिफ़ॉल्ट रूप से उपयोग किया जाता है। ध्यान दें कि मॉड को http संदर्भ में जोड़ा जाना चाहिए, मेरे मामले में यह सर्वर से पहले था।
अब आप इस बात की गारंटी देते हैं कि उपयोगकर्ता को अज्ञात भाषा में कैश से पेज नहीं मिलेगा।