首頁 > 軟體

nginx快取以及清除快取的使用

2022-07-25 10:01:53

快取

  • 快取的基本思想是利用使用者端存取的時間侷限性,將使用者端存取過的內容做一個副本,在一定時間記憶體放到本地,當改資料下次被存取時,不必連線到後端伺服器反覆去查詢資料,而是由本地儲存的副本響應資料。
  • 儲存在原生的這些副本具有一個過期時間,超過該時間將會更新。判斷一個副本資料是否為過期資料的辦法有很多,可以使用保留時間來判斷,也可以使用資料完整度來判斷。
  • 許多Web伺服器還具有校驗功能,就是當某些副本資料過期以後,先向後端伺服器傳送校驗請求,後端伺服器對這些資料進行校驗,如果發現原資料和副本沒有差別,則將過期副本重新置為可用副本。

快取的好處

  • 減輕伺服器負載
  • 提供網頁響應效率
  • 降低網路阻塞,增強網路可延伸性

為什麼使用快取?

  • 伺服器處理能力以及負載能力出現瓶頸,響應效率大大降低
  • 為了減少網路傳輸延遲,提升響應效率
  • 能夠避免因為後端伺服器出現異常以及網路故障,使用者端請求資料副本能夠及時響應

nginx的快取機制

proxy模組指令

以上nginx設定結合使用:

http {
  .
  .
  .
  proxy_cache_path /cache/nginx levels=1:2 keys_zone=imooc_cache:10m max_size=5g inactive=60m use_temp_path=off;

  .
  .
  .
  server {
    .
    .
    .
    location /api/ {
      proxy_cache imooc_cache;
      proxy_pass 127.0.0.1:81/api/;
      proxy_cache_valid 200 304 12h;
      proxy_cache_valid any 10m;
      proxy_cache_key $host$uri$is_args$args;
      include proxy_params;
    }
  }
}

proxy_params檔案的設定如下:

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

存取一次頁面,並向 http://192.168.148.168:8000/api/ 發起一個介面資料請求,檢視/cache/nginx目錄下的快取結果:

[root@localhost 02]# cat 9563faff155b9fcfbf3fb1b16c253021 
¿]n`ÿÿÿÿÿÿÿÿÿ´m`Džt> 
KEY: 192.168.148.170/api/index.php
HTTP/1.1 200 OK
Date: Wed, 07 Apr 2021 13:34:55 GMT
Server: Apache/2.4.46 (Unix) PHP/7.4.16
X-Powered-By: PHP/7.4.16
Content-Length: 31
Connection: close
Content-Type: text/html; charset=UTF-8

this is 192.168.148.170_php_new[root@localhost 02]# 

清除快取

ngx_cache_purge是nginx的第三方模組,能夠幫助我清除nginx中的快取。

如果啟動了快取,沒有安裝這個模組(ngx_cache_purge),重啟nginx會出現異常:

2021/04/18 10:15:36 [emerg] 12180#0: unknown directive “proxy_cache_purge” in /vhost/test_170.cc.conf:20

這個異常是在指示我們,找不到該指令的驅動,需要按照相關模組。

ngx_cache_purge只是nginx的第三方模組,並不是某個特殊的軟體,所以我們需要對nginx重新進行編譯,操作如下:

./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_gzip_static_module --with-http_stub_status_module --with-file-aio --with-http_realip_module --with-http_ssl_module --with-pcre=/home/pcre-8.44 --with-zlib=/home/zlib-1.2.11 --with-openssl=/home/openssl-1.1.1g --add-module=/home/ngx_cache_purge-2.3

make -j2

make install

設定nginx:

location ~ /clear_cache(.*) {
     allow   all;
     proxy_cache_purge imooc_cache $host$1$is_args$args;
}

快取清除測試
存取:http://192.168.148.170:8000/clear_cache//api/index.php, 存取這個連結將會清除介面:http://192.168.148.170:8000//api/index.php 的快取資料。

成功清除快取返回結果如下

沒有快取返回結果如下

控制nginx快取

proxy_no_cache

# set 指令為變數設定,proxy_no_cache引數中的值可以設定多個,但是多個值中,只要有一個是不為0的,就會通過快取響應資料
server
{
    .
    .
    .
    location /api/ {
       set $a 0; #設定初始值
       if ( $request_uri ~ /api/noapi/(.*) ){
           set $a 1; #如果滿足不快取 設定為1
       }

       proxy_no_cache $a;//
       .
       .
       .
    }
    location ~ /clear_cache(.*) {
         allow   all;
         proxy_cache_purge imooc_cache $host$1$is_args$args;
    }
}

檢視proxy_cache指令詳解

到此這篇關於nginx快取以及清除快取的使用的文章就介紹到這了,更多相關nginx快取及清除快取內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com