萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Shell 腳本自動化清理 Nginx Proxy 快取:批量精準刪除指定檔案快取

背景需求

Nginx proxy_cache 加速網站存取,但內容更新時需精準清除特定 URL 的快取。手動查找刪除效率低,本文提供自動化 Shell 腳本支援批量指定檔案名清理。

腳本功能特色

  • 支援多檔案參數批量清理:./clean_cache.sh index.html style.css app.js
  • 自動遍歷快取目錄,grep 比對檔案內容精準定位
  • 刪除前確認提示,避免誤刪
  • 輸出刪除結果日誌,便於稽核

完整腳本程式碼(clean_nginx_cache.sh)

#!/bin/bash
# Auto Clean Nginx Proxy Cache
# Usage: ./clean_nginx_cache.sh file1 [file2 ...]

CACHE_DIR="/data/www/proxy_cache_dir"  # 請修改為實際快取目錄

# 參數檢查
if [ $# -eq 0 ]; then
    echo "用法: $0 要清理的檔案名1 [檔案名2 ...]"
    echo "例: $0 index.html style.css"
    exit 1
fi

echo "準備清理快取檔案: $*"
echo "快取目錄: $CACHE_DIR"
echo "------------------------------"

# 逐一處理輸入檔案名
for file in "$@"; do
    echo "處理: $file"
    
    # 在快取目錄遞迴搜尋包含該檔案名的快取檔
    # 輸出匹配檔案的完整路徑
    mapfile -t cache_files < <(grep -ral "$file" "$CACHE_DIR" 2>/dev/null | sort -u)
    
    if [ ${#cache_files[@]} -eq 0 ]; then
        echo "  未找到相關快取"
        continue
    fi
    
    for cache_file in "${cache_files[@]}"; do
        echo "  刪除: $cache_file"
        rm -f "$cache_file"
        echo "  完成: $file → $cache_file 已刪除"
    done
done

echo "------------------------------"
echo "快取清理作業完成"

部署與自動化

1. 賦予執行權限

chmod +x clean_nginx_cache.sh

2. 手動執行範例

./clean_nginx_cache.sh index.html api/v1/user.js

3. 定時任務(每小時清理指定模式)

crontab -e
# 每小時第 5 分清理首頁與 API 快取
5 * * * * /path/to/clean_nginx_cache.sh index.html api/ >/var/log/nginx_cache_clean.log 2>&1

4. 整合到部署流程

在 CI/CD 部署腳本中,發布新版本後自動呼叫:

# 部署完成後
/path/to/clean_nginx_cache.sh $(cat changed_files.txt)

進階優化建議

  • 使用 Nginx 官方快取清除模組: ngx_cache_purge 支援 HTTP PURGE 方法,更高效
  • 快取鍵設計: 規範 proxy_cache_key 使 URL 與快取檔案名對應,避免 grep 全文搜尋
  • 效能優化: 大量快取時改用 find + xargs 或建立索引資料庫
  • 安全加固: 限制腳本執行權限、記錄操作審計日誌

常見問題排查

grep 速度極慢
快取檔案過多時,建議改用 proxy_cache_path ... keys_zone=mycache:10m 並在共享記憶體區查找,或使用 ngx_cache_purge
誤刪非目標檔案
檔案名過於通用(如 index.html)會匹配所有目錄,建議加入路徑特徵:grep -ral "domain.com/index.html"
權限不足無法刪除
確保執行腳本的使用者對快取目錄有寫入權限,或配置 sudoers 免密執行 rm

善用自動化腳本配合 Nginx 快取機制,能在內容更新與效能之間取得最佳平衡。

copyright © 萬盛學電腦網 all rights reserved