基於Nginx進行地圖瓦片緩存的方案描述

文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/nginx

1. 背景

       在產品的迭代中,咱們完成了移動端瓦片緩存方案和服務端瓦片緩存方案。可是當咱們遇到舊產品不易升級,或正式運行項目沒法馬上進行產品更新時,咱們能夠採用基於Nginx的緩存設置來實現第三方瓦片服務的瓦片緩存。最近在某24小時運行項目中,團隊成員hwg針對性的作了Nginx配置的設置和實施,我這裏作一個總結。緩存

2.Nginx的緩存策略

       這裏給出網友已經作好的一張示意圖:微信

 

       其核心就是HIT檢查,經過定義好的Key去緩存裏獲取,當沒有獲取到時則爲MISS狀態,而後進行服務轉發,將獲取的結果存入緩存。性能

3.實際項目詳細配置

3.1定義緩存配置

 

       相關配置的詳細說明:測試

  proxy_cache_path:緩存存放路徑。若是路徑帶上/,則表示絕對路徑。若是不帶/,則表示相對路徑。這裏寫的my_cache,則是相對路徑。spa

  levels : 設置緩存文件目錄層次;若是全部的緩存放入一個文件夾,則影響效率。這裏設置的是levels=1:2 ,表示兩級目錄;3d

    key_zone : 在共享內存中設置一塊存儲區域來存放緩存的key和metadata(相似使用次數),這樣nginx能夠快速判斷一個request是否命中或者未命中緩存,1m能夠存儲8000個key,10m能夠存儲80000個key;日誌

  max_size : 最大cache空間,若是不指定,會使用掉全部disk space,當達到配額後,會刪除最少使用的cache文件;code

  inactive : 未被訪問文件在緩存中保留時間,本配置中若是60分鐘未被訪問則不論狀態是否爲expired,緩存控制程序會刪掉文件,默認爲10分鐘;「須要注意的是,inactive和expired配置項的含義是不一樣的,expired只是緩存過時,但不會被刪除,inactive是刪除指定時間內未被訪問的緩存文件」;blog

  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/

                                                                               若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                                                                                                     

相關文章
相關標籤/搜索