文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
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.結果測試
第一次訪問時,未命中:
但是此時產生了緩存文件(二級目錄):
第二次訪問時,命中:
查看日志,確定性能提升:
-----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^