1. 程式人生 > >Nginx緩存配置之手動清除緩存

Nginx緩存配置之手動清除緩存

charset shel 分享 main key 刷新 zone web pointer

訪問我的博客

前言

前文介紹了利用 nginx 的 nginx_ngx_cache_purge 模塊來實現緩存功能,並設置了緩存時間為一天。

但是如果前端修改了頁面,比如首頁,由於 Nginx 緩存的存在,網站首頁並不會立即生效,而是要等到緩存過期。這樣明顯不是我們想要的結果,所以需要進行手動使 Nginx 緩存失效。以下為操作詳解。

基礎環境

  • 已經設置緩存的 Nginx 服務器, 參照我之前博文 Nginx緩存配置

Nginx 配置文件拆分

在企業 Nginx 應用中,Nginx 配置文件應該根據域名不同來進行拆分,然後再 nginx.conf中進行include引入。這樣的好處是便於管理配置文件,便於修改配置文件, 而 nginx.conf

文件中只保留 upstream 以及其他通用配置信息。

在 Nginx 的 conf 目錄下創建文件夾 include, 用於保存拆分的配置文件。

mkdir include

拆分的規則可以如下:

  • 桌面版(WEB)的 Nginx 配置文件,可以命名為 nginx_web.conf
  • 手機版(WAP)的 Nginx 配置文件,可以命名為 nginx_wap.conf
  • 安卓的 Nginx 配置文件,可以命名為 nginx_apk.conf
  • 蘋果的 Nginx 配置文件,可以命名為 nginx_ios.conf
  • 清除緩存的配置文件,可以命名為 purge.conf

/usr/local/nginx/conf/nginx.conf

中引入拆分的配置文件, 在配置文件中的 http 節點下進行引入

http{

  #......
  
  # 註意 purge.conf 必須要第一個引用!!!
  include include/purge.conf;
  # 引入其他配置文件
  include include/nginx_web.conf;
  #include include/nginx_wap.conf;
  #include include/nginx_apk.conf;
  #include include/nginx_ios.conf;
}

配置緩存清除

cd /usr/local/nginx/conf/include
vi purge.conf

#purge.conf 文件內容為:
server {
    listen       80;
    server_name 192.168.200.129;# 此處我配置的是本機ip
    charset utf8;

    location ~ /purge(/.*) {
        allow   all;# 訪問此接口的白名單,all代表所有人都可以訪問該路徑
        # tmpcache 為前文中 proxy_cache_path 裏配置的 keys_zone 的值
        # www.domain.com$1$is_args$args 表示緩存key的名稱,清除某一域名下的緩存,可以指定參數 
        # $1 代表正則匹配中的第一組
        proxy_cache_purge cachefile www.domain.com$1$is_args$args;
    }
}

# 保存 purge.conf 文件

測試清除緩存

如果要進行緩存清除,首先需要有緩存文件,此處參照前文 Nginx緩存配置 中,訪問 www.domain.com/testpage2 ,刷新頁面,直到緩存已經生成,即 X-Cache 的狀態為 HIT

進入 cd /tmp/cache/ ,查看已經生成了緩存文件

技術分享圖片

# 測試 nginx 配置是否正確
/usr/local/nginx/sbin/nginx -t
# 如果提示 is ok,說明配置沒有問題,否則需要修改

# 重啟 Nginx 
/usr/local/nginx/sbin/nginx -s reload

瀏覽器訪問(也可以通過 curl 命令來訪問):

# 清除key為 www.domain.com/ 的緩存
192.168.200.129/purge/    
# 清除 key 為 www.domain.com/testpage2 頁面緩存
192.168.200.129/purge/testpage2

如果返回

技術分享圖片

則表示清除成功。

資源下載

示例nginx配置文件

Nginx緩存配置之手動清除緩存