[caching] Nginx के कैश को कैसे साफ़ करें?


Answers

आप फाइल के आधार पर फाइल पर बाईपास / री-कैश भी कर सकते हैं

proxy_cache_bypass $http_secret_header;

और बोनस के रूप में आप यह हेडर वापस देख सकते हैं कि क्या आपको इसे कैश से मिला है ('एचआईटी' वापस कर देगा) या सामग्री सर्वर से ('BYPASS' वापस आ जाएगा)।

add_header X-Cache-Status $upstream_cache_status;

कैश किए गए फ़ाइल को समाप्त / रीफ्रेश करने के लिए, कैश किए गए पृष्ठ पर अनुरोध करने के लिए कर्ल या किसी भी शेष क्लाइंट का उपयोग करें।

curl http://abcdomain.com/mypage.html -s -I -H "secret-header:true"

यह आइटम की ताजा प्रतिलिपि वापस करेगा और यह कैश में क्या बदल देगा।

Question

मैं nginx का उपयोग फ्रंट सर्वर के रूप में करता हूं, मैंने सीएसएस फाइलों को संशोधित किया है, लेकिन nginx अभी भी पुराने लोगों की सेवा कर रहा है।

मैंने nginx को पुनरारंभ करने की कोशिश की है, कोई सफलता नहीं है और मैंने गुगल किया है, लेकिन इसे साफ़ करने का एक वैध तरीका नहीं मिला है।

कुछ लेख कहते हैं कि हम केवल कैश निर्देशिका को हटा सकते हैं: var/cache/nginx , लेकिन मेरे सर्वर पर ऐसी कोई निर्देशिका नहीं है।

अब मुझे क्या करना चाहिए?




मैं एक बहुत ही सरल बैश स्क्रिप्ट चलाता हूं जो नौकरी करने के लिए सभी 10 सेकंड लेता है और पूरा होने पर मुझे एक मेल भेजता है।

#!/bin/bash
sudo service nginx stop
sudo rm -rf /var/cache/nginx/*
sudo service nginx start | mail -s "Nginx Purged" me@gmail.com
exit 0



उन लोगों के लिए जो अन्य समाधान काम नहीं कर रहे हैं, जांचें कि क्या आप CloudFlare जैसी DNS सेवा का उपयोग कर रहे हैं। उस स्थिति में "विकास मोड" सक्रिय करें या "पुर्ज कैश" टूल का उपयोग करें।




हमारे पास एक बहुत बड़ा nginx कैश (गीगाबाइट्स) है जिसे हमें कभी-कभी सफाया करने की आवश्यकता होती है। मैंने एक स्क्रिप्ट तैयार की है जो तुरंत कैश को साफ़ करता है (जहां तक ​​Nginx का संबंध है) और फिर डिस्क I / O के लिए मुख्य अनुप्रयोग को भूख से बिना कैश निर्देशिका को हटा देता है।

संक्षेप में:

  1. कैश फ़ोल्डर को एक नए स्थान पर ले जाएं (उसी फाइल सिस्टम पर!) (यह किसी भी खुले फ़ाइल डिस्क्रिप्टर को बाधित नहीं करता है)
  2. मूल कैश फ़ोल्डर, खाली खाली करें
  3. Nginx को पुनः लोड करें ( सुंदर रीलोड, जहां nginx पुराने श्रमिकों को प्रगति के अनुरोधों को पूरा करने देता है)
  4. पुराने कैश किए गए डेटा को हटा दें

यहां Ubuntu 16.04 LTS के अनुरूप स्क्रिप्ट है, कैश /mnt/nginx-cache पर स्थित /mnt/nginx-cache :

#!/bin/bash
set -e

TMPCACHE=`mktemp --directory --tmpdir=/mnt nginx-cache-XXXXXXXXXX`
TMPTEMP=`mktemp --directory --tmpdir=/mnt nginx-temp-XXXXXXXXXX`

# Move the old cache folders out of the way
mv /mnt/nginx-cache $TMPCACHE
mkdir -p /mnt/nginx-cache
chmod -R 775 /mnt/nginx-cache
chown www-data:www-data /mnt/nginx-cache

mv /mnt/nginx-temp $TMPTEMP
mkdir -p /mnt/nginx-temp
chmod -R 775 /mnt/nginx-temp
chown www-data:www-data /mnt/nginx-temp

# Tell Nginx about the new folders.
service nginx reload

# Create an empty folder.
rm -rf /mnt/empty
mkdir -p /mnt/empty

# Remove the old cache and old temp folders w/o thrashing the disk...
# See http://serverfault.com/questions/546177/how-to-keep-subtree-removal-rm-rf-from-starving-other-processes-for-disk-i
# Note: the `ionice` and `nice` may not actually do much, but why not?
ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ $TMPCACHE
ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ $TMPTEMP
rm -rf $TMPCACHE
rm -rf $TMPTEMP

rm -rf /mnt/empty

और यदि यह सहायक है, तो यहां हम Nginx कॉन्फ़िगरेशन का उपयोग करते हैं:

upstream myapp {
    server localhost:1337 fail_timeout=0;
}

proxy_cache_path /mnt/nginx-cache/app levels=2:2:2 keys_zone=app_cache:100m inactive=1y max_size=10g;
proxy_temp_path  /mnt/nginx-temp/app;

server {
    listen   4316 default;
    server_name  myapp.com;

    location / {
        proxy_pass http://appserv;
        proxy_cache app_cache;
        proxy_cache_valid 200 1y;
        proxy_cache_valid 404 1m;
    }
}



मेरे nginx इंस्टॉल में मैंने पाया कि मुझे जाना है:

/opt/nginx/cache

तथा

sudo rm -rf *

उस निर्देशिका में। यदि आप अपने nginx इंस्टॉल के पथ को जानते हैं और कैश निर्देशिका पा सकते हैं तो यह आपके लिए भी काम कर सकता है। rm -rf कमांड के साथ बहुत सावधान रहें , अगर आप गलत निर्देशिका में हैं तो आप अपनी पूरी हार्ड ड्राइव को हटा सकते हैं।




मैं एक तरह का मुद्दा अनुभव कर रहा था:

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

समाधान: वीएम पर साझा फ़ाइल (मेरे मामले में सीएसएस फ़ाइल) खोजें। नैनो के साथ खोलें और विंडोज़ शेयर में फ़ाइल की तुलना करें (वे समान दिखाई देते हैं)। वीएम पर साझा फ़ाइल को नैनो से बचाएं। सभी परिवर्तन अब ब्राउज़र में परिलक्षित होते हैं। यकीन नहीं है कि यह क्यों काम करता है लेकिन यह मेरे मामले में किया था।

अद्यतन: वीएम सर्वर को रिबूट करने के बाद समस्या वापस आई। समाधान के तहत निर्देशों के बाद सीएसएस ने फिर से अद्यतनों के लिए उत्तरदायी बनाया




find /etc/nginx/cache_folder -type d -exec rm -rvf {} \;
mkdir /etc/nginx/cache_folder
service nginx restart

सही पथ को सही तरीके से निर्दिष्ट करने के लिए सावधान रहें।




आप nginx की कैश निर्देशिका हटा सकते हैं या आप विशिष्ट फ़ाइल खोज सकते हैं:

grep -lr 'http://mydomain.pl/css/myedited.css' /var/nginx/cache/*

और nginx को केवल ताज़ा करने के लिए केवल एक फ़ाइल हटाएं।




मेरे सर्वर पर, nginx कैश फ़ोल्डर /data/nginx/cache/

तो मैंने इसे केवल हटा दिया: sudo rm -rf /data/nginx/cache/

उम्मीद है कि यह किसी की मदद करेगा।






Links