1. 程式人生 > >基於Nginx進行地圖瓦片快取的方案描述

基於Nginx進行地圖瓦片快取的方案描述

1. 背景

       在產品的迭代中,我們完成了移動端瓦片快取方案和服務端瓦片快取方案。但是當我們遇到舊產品不易升級,或正式執行專案無法立刻進行產品更新時,我們可以採用基於Nginx的快取設定來實現第三方瓦片服務的瓦片快取。最近在某24小時執行專案中,團隊成員hwg針對性的做了Nginx配置的設定和實施,我這裡做一個總結。

2.Nginx的快取策略

       這裡給出網友已經做好的一張示意圖:

 

       其核心就是HIT檢查,通過定義好的Key去快取裡獲取,當沒有獲取到時則為MISS狀態,然後進行服務轉發,將獲取的結果存入快取。

3.實際專案詳細配置

3.1定義快取配置

 

       相關配置的詳細說明:

  proxy_cache_path:快取存放路徑。如果路徑帶上/,則表示絕對路徑。如果不帶/,則表示相對路徑。這裡寫的my_cache,則是相對路徑。

  levels : 設定快取檔案目錄層次;如果所有的快取放入一個資料夾,則影響效率。這裡設定的是levels=1:2 ,表示兩級目錄;

    key_zone : 在共享記憶體中設定一塊儲存區域來存放快取的key和metadata(類似使用次數),這樣nginx可以快速判斷一個request是否命中或者未命中快取,1m可以儲存8000個key,10m可以儲存80000個key;

  max_size : 最大cache空間,如果不指定,會使用掉所有disk space,當達到配額後,會刪除最少使用的cache檔案;

  inactive : 未被訪問檔案在快取中保留時間,本配置中如果60分鐘未被訪問則不論狀態是否為expired,快取控制程式會刪掉檔案,預設為10分鐘;“需要注意的是,inactive和expired配置項的含義是不同的,expired只是快取過期,但不會被刪除,inactive是刪除指定時間內未被訪問的快取檔案”;

  use_temp_path : 如果為off,則nginx會將快取檔案直接寫入指定的cache檔案中,而不是使用temp_path儲存,official建議為off,避免檔案在不同檔案系統中不必要的拷貝;

3.2 快取使用

 

        proxy_cache :啟用proxy cache,指定宣告好的快取區域key_zone;
        proxy_cache_valid  200 206 304 301 302 10d; 含義為對httpcode為200\206等的快取結果快取10天;

   proxy_cache_key $uri : 定義快取唯一key,通過唯一key來進行hash存取;

    proxy_no_cache和proxy_cache_bypass:當為0時表示快取,不為0時表示不快取。這裡與匹配語句配合,當傳入引數中包含指定規則時,才進行快取。

3.3其他擴充套件配置

 

       對訪問請求記錄的日誌路徑,以及記錄日誌格式的定義。

4.結果測試

       第一次訪問時,未命中:

 

      但是此時產生了快取檔案(二級目錄):

 

  第二次訪問時,命中:

 

       檢視日誌,確定性能提升:

 

                                                                               如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^