基於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.結果測試
第一次訪問時,未命中:
但是此時產生了快取檔案(二級目錄):
第二次訪問時,命中:
檢視日誌,確定性能提升:
如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^