เรามีแคช nginx ขนาดใหญ่มาก (กิกะไบต์) ซึ่งบางครั้งเราจำเป็นต้องล้างข้อมูล ฉันใช้งานสคริปต์ที่ล้างแคชทันที (เท่าที่ Nginx เกี่ยวข้อง) จากนั้นลบไดเรกทอรีแคชโดยไม่ต้องใช้แอปพลิเคชันหลักสำหรับดิสก์ I / O
สรุป:
- ย้ายโฟลเดอร์แคชไปยังตำแหน่งใหม่ (ในระบบไฟล์เดียวกัน!) (สิ่งนี้จะไม่รบกวนตัวอธิบายไฟล์ที่เปิดอยู่)
- สร้างโฟลเดอร์แคชดั้งเดิมขึ้นใหม่ให้ว่างเปล่า
- โหลด Nginx ( อย่างสง่างามซ้ำโหลดโดยที่ nginx อนุญาตให้พนักงานเก่าดำเนินการตามคำขอเสร็จ)
- ลบข้อมูลแคชเก่า
นี่คือสคริปต์ที่ปรับให้เหมาะกับ Ubuntu 16.04 LTS โดยมีแคชอยู่ที่/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;
}
}
proxy_cache
?