कैशिंग रिवर्स प्रॉक्सी के रूप में निगनेक्स कैसे सेट करें?


143

मैंने हाल ही में सुना है कि नग्नेक्स ने कैशिंग को अपने रिवर्स प्रॉक्सी फीचर में जोड़ा है। मैंने चारों ओर देखा, लेकिन इसके बारे में ज्यादा जानकारी नहीं पा सका।

मैं अपाचे / Django के सामने कैशिंग रिवर्स प्रॉक्सी के रूप में Nginx स्थापित करना चाहता हूं: Apache के लिए कुछ (लेकिन सभी नहीं) डायनामिक पृष्ठों के लिए Nginx प्रॉक्सी अनुरोध करने के लिए, फिर उत्पन्न पृष्ठों को कैश करें और कैश के लिए उन पृष्ठों के लिए बाद के अनुरोधों की सेवा करें।

आदर्श रूप से मैं कैश को 2 तरीकों से अमान्य करना चाहूंगा:

  1. कैश्ड आइटम पर एक समाप्ति तिथि सेट करें
  2. कैश्ड आइटम को स्पष्ट रूप से अमान्य करना। उदाहरण के लिए, यदि मेरे Django बैकएंड ने कुछ डेटा अपडेट किए हैं, तो मैं प्रभावित पृष्ठों के कैश को अमान्य करने के लिए Nginx को बताना चाहूंगा

क्या ऐसा करने के लिए Nginx को सेट करना संभव है? कैसे?


परीक्षण नहीं किया गया, लेकिन gumroad.com/l/ngx_purge से : "ngx_purge Nginx के लिए एक शुद्ध Lua मॉड्यूल है जो उपयोगकर्ता को nginx कैश से ऑब्जेक्ट शुद्ध करने की अनुमति देता है।"
जेम हैबटलज़ेल

जवाबों:


97

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

इस कॉन्फ़िगरेशन में, कैश्ड नहीं की गई वस्तुओं को example.net से पुनर्प्राप्त किया जाएगा और संग्रहीत किया जाएगा। कैश्ड संस्करणों को भविष्य के ग्राहकों तक परोसा जाएगा जब तक कि वे अब वैध (60 मिनट) नहीं हैं।

आपके कैश-नियंत्रण और समाप्ति HTTP हेडर को सम्मानित किया जाएगा, इसलिए यदि आप स्पष्ट रूप से समाप्ति तिथि निर्धारित करना चाहते हैं, तो आप ऐसा कर सकते हैं कि जो आप कर रहे हैं उसमें सही हेडर सेट करके।

ऐसे कई पैरामीटर हैं जिन्हें आप ट्यून कर सकते हैं - विभिन्न सेटिंग्स / मापदंडों के अर्थ सहित विवरणों के बारे में अधिक जानकारी के लिए nginx प्रॉक्सी मॉड्यूल दस्तावेज़ देखें: http://nginx.org/r/proxy_cache_path

http {
  proxy_cache_path  /var/www/cache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=600m;
  proxy_temp_path /var/www/cache/tmp; 


  server {
    location / {
      proxy_pass http://example.net;
      proxy_cache my-cache;
      proxy_cache_valid  200 302  60m;
      proxy_cache_valid  404      1m;
    }
  }
}

7
यह नए एप्लिकेशन के लिए एक उचित पहला कदम है जिसमें 20k / req / s नहीं है।

5
@ दूसरा चरण क्या होगा?
जुरगेन पॉल

42
@Legit - मुझे नहीं पता, लेकिन परंपरागत रूप से अंतिम चरण "लाभ" है :-)
स्टीफन C

अफसोस की बात है, यह nginx 1.11 के साथ काम नहीं करता है। चूंकि आखिरी अपडेट लगभग 3 साल पहले था, ऐसा लग रहा है कि यह अब समाधान नहीं है।
izogfif

क्या है: inactive=600mमतलब? नहीं है inactiveसमय होने के लिए लगता है? `[inactive=time]
NeverEndingQueue

47

आप विशेष रूप से कैश्ड पृष्ठों को अमान्य कर सकते हैं

proxy_cache_bypass       

कहते हैं कि आप एक पृष्ठ को कैश करना चाहते हैं, इस तरह से कैश सेट करें

location = /pageid {
  proxy_pass http://localhost:82;
  proxy_set_header   Host             $host;
  proxy_set_header   X-Real-IP        $remote_addr;
  proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  proxy_ignore_headers Set-Cookie; 
  proxy_ignore_headers Cache-Control; 
  proxy_cache_bypass        $http_secret_header;
  add_header X-Cache-Status $upstream_cache_status;
}

अब, जब आप उस पेज को अमान्य करना चाहते हैं और फिर से कैश करना चाहते हैं

हेडर के साथ एक गुप्त कर्ल कॉल करें

curl "www.site.com/pageid" -s -I -H "secret_header:true" 

यह इसे अमान्य और कैश करेगा।

नग्नेक्स से काम करता है 0.7।

अतिरिक्त बोनस के add_header X-Cache-Statusरूप में यह जांचने के लिए इस्तेमाल किया जा सकता है कि पेज कैश से है या नहीं।


यह केवल कैश्ड पृष्ठों को तब अपडेट कर सकता है जब नया पेज भी उपलब्ध हो। यदि आपने एक पृष्ठ (404 या अन्य त्रुटियों को अब बैकएंड द्वारा परोसा जाता है) को हटा दिया है, तो पृष्ठ अब एक सेट-कुकी या "सामग्री-नियंत्रण: निजी" शीर्ष लेख भेजता है, कैश्ड सामग्री "अमान्य" नहीं होगी।
rbu

36

मेरा सुझाव है कि आप वार्निश को एक कोशिश दें। वार्निश को विशेष रूप से रिवर्स प्रॉक्सी कैश के रूप में डिज़ाइन किया गया है। यह मूल सर्वर से आपके द्वारा भेजे गए सभी कैश कंट्रोल हेडर का सम्मान करेगा, जो आपके पहले अनुरोध को संतुष्ट करता है।

आपके दूसरे अनुरोध के लिए, स्पष्ट अमान्य। मेरी दृढ़ अनुशंसा उस संसाधन के url का नाम बदलना है जिसे आप अमान्य करना चाहते हैं, या तो फ़ाइल का नाम बदलकर या किसी प्रकार के क्वेरी स्ट्रिंग कैश बस्टर का उपयोग करके। वार्निश में एक PURGEऑपरेशन होता है जो वार्निश के कैश से संसाधन को हटा देगा, लेकिन यह आपको और उपयोगकर्ता के बीच किसी अन्य कैश पर नियंत्रण नहीं देगा। जैसा कि आपने कहा है कि आप एक संसाधन को स्पष्ट रूप से शुद्ध करना चाहते हैं, तो मानक http नियंत्रण हेडर आपकी मदद नहीं करेगा। उस स्थिति में संसाधन के कैशिंग को हराने का सबसे मूर्खतापूर्ण तरीका इसका नाम बदलना है।


क्या आप बता सकते हैं कि "फ़ाइल का नाम बदलने या क्वेरी स्ट्रिंग कैश बस्टर के कुछ रूप का उपयोग करने" से आपका क्या मतलब है? मुझे यकीन नहीं है कि मैं समझता हूं कि PURGE जैसे ऑपरेशन का उपयोग करना एक अच्छा विचार क्यों नहीं है।
कंटीन्यूशन

5
वार्निश के लिए +1। नौकरी के लिए सही उपकरणों का उपयोग करना हमेशा बेहतर होता है।
टॉम ओ'कॉनर

4
@ अविश्वास: प्रदर्शन और बहुमुखी प्रतिभा के क्षेत्र में वार्निश को छूने की कोई उम्मीद नहीं है। यह लीड फ्रीबीएसडी कर्नेल डेवलपर्स और यूरोप में स्थित एक समर्पित टीम द्वारा समर्थित है। वार्निश ट्विटर, हेरोकू और कई और अधिक उत्पादन में है।

2
कैश-बस्टर का सबसे सरल उदाहरण एक क्वेरी नंबर को स्ट्रिंग स्ट्रिंग में स्थैतिक संसाधन में जोड़ना है, इसलिए style.css style.css हो जाता है। 123। जब आप फ़ाइल के एक नए संस्करण को पुश करना चाहते हैं, तो आप संसाधन के url को style.css में बदल देते हैं! 124 और अब कैश इसे अलग से कैश की जाने वाली पूरी तरह से नई संपत्ति के रूप में ले जाएगा। अपाचे किसी भी क्वेरी स्ट्रिंग के साथ फ़ाइल style.css की सेवा करेगा, इसलिए वास्तविक फ़ाइल में किसी भी बदलाव की आवश्यकता नहीं है।
chmac

3
यदि संभव हो, तो कैश बस्टर को फ़ाइल नाम में ही डालना सबसे अच्छा है, जैसे style.v123.cssकि कुछ कैश अनुरोधों को कैश नहीं करेंगे जिनके पास क्वेरी स्ट्रिंग है।
नूह मैकल्रैथ

8

चयनित पृष्ठों को अमान्य करने के लिए आप नगीनक्स-0.8.x के लिए "cache_purge" पैच का उपयोग कर सकते हैं जो कि जो चाहते हैं वह ठीक करता है;)

यह यहाँ उपलब्ध है


8

अधिकांश कैशिंग टूल (Citrix) एक कैश्ड पृष्ठ को फिर से खोलने के लिए बल-रिफ्रेश (Ctrl + r) की अनुमति देते हैं।

यहाँ एक चाल है जो मैंने नगनेक्स में कुछ ऐसा ही करने के लिए पाया।

server  {
        # Other settings
        proxy_pass_header       Set-Cookie; # I want to cache logged-in users
        proxy_ignore_headers    X-Accel-Redirect;
        proxy_ignore_headers    X-Accel-Expires Expires Cache-Control;
        if ($http_cache_control ~ "max-age=0") {set $eac 1;}
        proxy_cache_bypass $eac;
}

यह मानता है कि जब आप अपने ब्राउज़र में Ctrl + r करते हैं, तो कैश-कंट्रोल हेडर की अधिकतम-आयु = 0 होती है। मुझे पता है कि क्रोम ऐसा करता है, लेकिन मैंने अन्य ब्राउज़रों में कोशिश नहीं की है। अधिक हेडर फ़ील्ड्स को जोड़ना आसान हो सकता है, सिर्फ और अधिक जोड़कर यदि स्टेटमेंट्स जो $eacवेरिएबल को 1 पर सेट करते हैं ।


5

निगंक्स में कैशिंग बहुत नया कार्य है (और अब के लिए इतनी अच्छी तरह से प्रलेखित नहीं है), लेकिन उत्पादन में उपयोग किए जाने के लिए पर्याप्त स्थिर है।


4

मेरा मानना ​​है कि NginxHttpProxyModule http अनुरोधों को पूरा करने में सक्षम है। निर्देश के साथ शुरू करें:

proxy_cache

हां, निर्देशों के माध्यम से कैश व्यवहार को नियंत्रित करना संभव है:

proxy_cache_valid

3

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


यहाँ प्रलेखन है: wiki.nginx.org/NginxHttpProxyModule#proxy_cache
rmalayter

2

यदि आप अपने आवेदन पर ईटैग का उपयोग करते हैं और उसके सामने नेनेक्स लगाते हैं तो यह आपके लिए समाप्ति की देखभाल करेगा, क्योंकि यदि ईटैग बदलता है तो यह कैश को अमान्य कर देगा।


वास्तव में? यह देखता है कि नग्नेक्स ईटैग से मेल खाता है और कभी भी यह पता लगाने के लिए एप्लिकेशन से बात नहीं करता है कि क्या कोई अद्यतन एटाग है।
जॉन नेगल

2

आप कई निर्देशों / मापदंडों के साथ Nginx के कैश समाप्ति को नियंत्रित कर सकते हैं:

  • proxy_cache_valid 200 302 10m;
  • नीचे HTTP हेडर में से एक जोड़ना (प्राथमिकता महत्वपूर्ण है - मेरी ब्लॉग पोस्ट देखें ):
    • Expires
    • Cache-Control
    • X-Accel-Expires
  • inactiveमें पैरामीटर proxy_cache_pathके निर्देश:

    proxy_cache_path /data/nginx/cache keys_zone=one:10m inactive=60m;

यदि आप नगनेक्स कैशिंग के बारे में अधिक जानना चाहते हैं तो मैं अपने ब्लॉग पोस्ट की सलाह देता हूं

शुद्ध करने का विषय वास्तव में दिलचस्प है क्योंकि यह सुविधा केवल नगनेक्स प्लस (नग्नेक्स के वाणिज्यिक संस्करण) में मौजूद है। मुझे वास्तव में @ रैंडी-वालेस जवाब पसंद है। लेकिन ngx_cache_purge मॉड्यूल की तरह अन्य संभावनाएं भी हैं ।

आपके द्वारा की गई सरलतम चीज़ कैश की गई फ़ाइल को मैन्युअल रूप से निकाल सकती है:

  • अपनी हैश कुंजी उत्पन्न करें:

    echo -n ‘httpczerasz.com/time.php’ | md5sum
    
  • फाइल को फाइल सिस्टम से हटा दें:

    rm /data/nginx/cache/1/27/2bba799df783554d8402137ca199a271
    

1

भविष्य के आगंतुकों के लिए: इस बीच nginx रिवर्स प्रॉक्सी में कैशिंग एकीकृत है और डॉक्स यहां उपलब्ध हैं:

सिंटेक्स: प्रॉक्सी_कैच ज़ोन | बंद;

डिफ़ॉल्ट: प्रॉक्सी_चेचे बंद;

संदर्भ: http, सर्वर, स्थान

कैशिंग के लिए उपयोग किए गए साझा मेमोरी ज़ोन को परिभाषित करता है। एक ही ज़ोन का उपयोग कई स्थानों पर किया जा सकता है। पैरामीटर मान में चर (1.7.9) हो सकते हैं। बंद पैरामीटर पिछले कॉन्फ़िगरेशन स्तर से विरासत में मिली कैशिंग को अक्षम करता है।


हाय तारिक, यह सवाल बहुत विशिष्ट था कि क्या हासिल किया जाना चाहिए, और यह 'बस सक्षम कैश' से थोड़ा परे है।
asdmin

0
fastcgi_cache_path / opt / nginx-cache level = 2: 2 keys_zone = img: 50 मीटर;

    स्थान / img / {
        fastcgi_pass $ बैकेंड;
        fcgi_params शामिल करें;
        fastcgi_intercept_errors बंद;   
        fastcgi_cache_key $ server_addr $ request_uri;       
        fastcgi_cache img;
        fastcgi_cache_valid 1 मी;
        fastcgi_hide_header सेट-कुकी;
    }

यह / img / स्थान के लिए कैश बनाता है। यह / ऑप्ट / nginx-cache में है। वस्तुओं को 1 मिनट के लिए कैश किया जाता है।

आप किसी के बजाय विभिन्न प्रतिक्रिया कोड लिख सकते हैं।

अब आप चयनित पृष्ठों के लिए कैश को अमान्य नहीं कर सकते। शायद 0.8.x में यह संभव होगा।


मूल प्रश्न अपाचे के सामने नग्नेक्स का उपयोग करने के बारे में था, नग्नेक्स द्वारा संभाले जाने वाले फास्टकेगी एप्लिकेशन के सामने नहीं।
ग्राहम डम्पलटन

0

एक nginx प्लगइन है जिसे ncache कहा जाता है जो दावा करता है कि "nginx वेब सर्वर पर वेब कैश सिस्टम का आधार है, तेज और स्क्वीड की तुलना में अधिक कुशल।"

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