Nginx 緩存清理

NGINX 可以從緩存中刪除舊的和過期的緩存文件。過期的緩存內(nèi)容需要及時刪除,以防止同時提供新舊版本的網(wǎng)頁。當收到包含自定義 HTTP 標頭或 HTTP PURGE 方法的特殊“Purge”請求時,將清除緩存。

配置緩存清除

讓我們設置一個配置,用于識別使用 HTTP PURGE 方法的請求并刪除匹配的 URL。

1. 在 http {} 上下文中,添加一個新變量,例如 $purge_method,它依賴于 $request_method 變量:

http {  
    ...  
    map $request_method $purge_method {  
        PURGE 1;  
        default 0;  
    }  
}  

2.在配置緩存的 location {} 塊中,添加 proxy_cache_purge 指令來指定緩存清除請求的條件。在我們的例子中,就是上面步驟中配置的 $purge_method :

server {  
    listen      80;  
    server_name www.caioniaojc.com;  
  
    location / {  
        proxy_pass  https://localhost:8002;  
        proxy_cache mycache;  
  
        proxy_cache_purge $purge_method;  
    }  
}  

發(fā)送清除命令

當 proxy_cache_purge 指令配置完成后,我們需要發(fā)送一個特殊的 cache?purge 請求來清除緩存。我們可以使用一系列工具發(fā)出清除請求,包括本例中的 curl 命令: 

$ curl -X PURGE -D - "http://www.soo66.com/*"
HTTP/1.1 204 No Content  
Server: nginx/1.15.0  
Date: Sat, 19 May 2018 16:33:04 GMT  
Connection: keep-alive  

在上面的示例中,具有由星號通配符指定的公共 URL 部分的資源被清除。但是,此類緩存條目不會完全從緩存中刪除:它們保留在磁盤上,直到它們因不活動、緩存清除程序或客戶端嘗試訪問它們而被刪除。

限制對清除命令的訪問

建議限制允許發(fā)送緩存清除請求的 IP 地址數(shù)量:

geo $purge_allowed {  
   default         0;  # deny from other  
   10.0.0.1        1;  # allow from localhost  
   192.168.0.0/24  1;  # allow from 10.0.0.0/24  
}  
  
map $request_method $purge_method {  
   PURGE   $purge_allowed;  
   default 0;  
}  

在上面的例子中,NGINX 檢查請求中是否使用了 PURGE 方法,如果是,則分析客戶端 IP 地址。如果 IP 地址被列入白名單,則 $purge_method 設置為 $purge_allowed:1 用于允許清除,0 用于拒絕。

從緩存中完全刪除文件

要完全刪除與星號匹配的緩存文件,請激活一個特殊的緩存清除進程,該進程永久迭代所有緩存條目并刪除與通配符鍵匹配的條目。在 http {} 上下文中的 proxy_cache_path 指令中包含 purger 參數(shù):

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m purger=on;  

緩存清除配置示例

http {  
    ...  
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m purger=on;  
  
    map $request_method $purge_method {  
        PURGE 1;  
        default 0;  
    }  
  
    server {  
        listen      80;  
        server_name www.example.com;  
  
        location / {  
            proxy_pass        https://localhost:8002;  
            proxy_cache       mycache;  
            proxy_cache_purge $purge_method;  
        }  
    }  
  
    geo $purge_allowed {  
       default         0;  
       10.0.0.1        1;  
       192.168.0.0/24  1;  
    }  
  
    map $request_method $purge_method {  
       PURGE   $purge_allowed;  
       default 0;  
    }  
}  

字節(jié)范圍緩存

有時初始緩存填充操作需要相當長的時間,特別是對于大型文件。例如,當一個視頻文件開始下載以滿足部分文件的初始請求時,后續(xù)請求必須等待整個文件下載并放入緩存中。

在 Nginx 中,可以緩存此類范圍請求,并使用 Cache Slice 模塊逐漸填充緩存,該模塊將文件劃分為更小的“切片”。每個范圍請求選擇覆蓋所請求范圍的特定切片,如果該范圍仍未緩存,則將其放入緩存中。對這些切片的所有其他請求都從緩存中獲取數(shù)據(jù)。

要啟用字節(jié)范圍緩存:

  • 首先,確保 NGINX 是使用 Cache Slice 模塊編譯的。
  • 使用 slice 指令定義切片的大小:
location / {  
    slice  1m;  
}  
  • 選擇使切片下載速度更快的切片大小。如果大小太小,則內(nèi)存使用可能過多,并且打開了大量文件描述符。如果大小很大,則處理請求可能會導致延遲。將 $slice_range 變量添加到緩存鍵:
proxy_cache_key $uri$is_args$args$slice_range;  
 
  • 使用 206 狀態(tài)代碼啟用響應緩存:
proxy_cache_valid 200 206 1h;  
  • 通過在 Range 標頭字段中設置變量(即 $slice_range)來啟用將范圍請求傳遞到代理服務器:
proxy_set_header  Range $slice_range;  
 

這是完整的配置:

location / {  
    slice             1m;  
    proxy_cache       cache;  
    proxy_cache_key   $uri$is_args$args$slice_range;  
    proxy_set_header  Range $slice_range;  
    proxy_cache_valid 200 206 1h;  
    proxy_pass        http://localhost:8000;  
}

請注意,如果打開切片緩存,則不得更改初始文件。

組合配置示例

http {  
    ...  
    proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300   
                     loader_files=200 max_size=200m;  
  
    server {  
        listen 8080;  
        proxy_cache mycache;  
  
        location / {  
            proxy_pass http://backend1;  
        }  
  
        location /some/path {  
            proxy_pass http://backend2;  
            proxy_cache_valid any 1m;  
            proxy_cache_min_uses 3;  
            proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;  
        }  
    }  
}  
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清