當前位置:
首頁 > 最新 > 淺談 nginx proxy cache

淺談 nginx proxy cache

本篇文章介紹了nginx proxy 緩存簡介、配置、優化。

回顧上篇文章:從零認識區塊鏈

nginx proxy 緩存簡介

nginx 將用戶已經訪問過的內容保留在 nginx 伺服器本地,這樣在一段時間內用戶再次訪問該數據,就不需要 nginx 伺服器對後端伺服器發請求,減少 nginx 和後端伺服器之間的網路阻塞,減小數據延遲,提高用戶訪問速度。即使後端伺服器宕機,nginx 的 cache 也會返回給客戶端請求,不至於服務不可用。 proxy cache 是把請求的鏈接用 md5 編碼 hash 後保存,所以它可以支持任意鏈接,同時也支持 404/301/302 這樣的非 200 狀態。

nginx proxy cache 緩存配置


配置項說明

proxy_cache_path:本地路徑,緩存文件存放路徑。

levels:cache 目錄的層次,使用 2 級目錄來存儲緩存文件。

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

inactive: 未被訪問文件在緩存中保留時間,本配置中如果 2 天未被訪問,緩存控制程序會刪掉文件,默認為 10 分鐘。

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

proxy_cache: 啟用 proxy cache,指定 key_zone。

proxy_cache_valid: 設置不同相應碼的緩存時間,當不指定響應碼的時候,例如 proxy_cache_valid 5m; 只對響應碼為 200,301,302 的訪問請求資源設置緩存時間。

proxy_cache_key:若某個介面返回的值基本不變,或者是特定類別的,就可以根據請求的 url 的參數,自定義 cache key。

proxy_ignore_headers:禁止處理來自代理伺服器的應答,可以設置的欄位有」X-Accel-Redirect」, 「X-Accel-Expires」, 「Expires」 或」Cache-Control。

注意:proxy_cache_key 壓縮方式 Accept-Encoding 應該指定為通用壓縮格式,防止客戶端不支持某種壓縮方式。

nginx log 里可以添加緩存命中狀態,便於查看是否命中,統計緩存命中率,具體可以如下定義格式:

$upstream_cache_status 包含以下幾種狀態:

MISS:未命中,請求被傳到後端

HIT:緩存命中

EXPIRED:緩存過期,請求被傳到後端

UPDATING:緩存正在更新,使用舊緩存應答

STALE:後端將得到過期的應答

故障時利用 cache 對服務降級

當調用後端介面暫時故障時,比如用手機看視頻拿不到播放數據,或者不出廣告,這時候如果有 cache,nginx 會返回給客戶端之前暫存的緩存數據,或者提前準備好的靜態頁面,用戶不至於面對一個空白頁面。對於重要的一級介面,可以每天請求一次填充 cache 到備份 nginx 伺服器,即使線上後端介面完全不可用,流量冗餘到備份伺服器,對用戶體驗也不會有很大影響。

cache 優化

nginx 只有硬碟級別 cache,沒有內置內存級別的 cache,為了利用內存加速,減少伺服器響應時間,可以將 cache 目錄掛載到 / dev/shm 內存目錄。

mount --bind /dev/shm/proxy_cache /home/work/nginx/proxy_cache

線上流量相差不大的情況下,將 cache 目錄掛載到內存與未掛載到內存的耗時對比,還是有明顯差距,將 cache 目錄掛載到內存中,響應時間可以縮短 7 倍以上。

總結

緩存不是什麼高深技術,但是正確利用緩存,在業務遭受大流量衝擊下,會起到重要作用,緩存的 key 設置需合理,避免不正確緩存。

參考資料

http://nginx.org/en/docs/http/ngx_http_proxy_module.html

http://www.alonely.com.cn/Nginx/20160827/18993.html

小米運維

和我們一起,成為更酷的運維工程師


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 小米運維 的精彩文章:

Linux 網路故障排查基礎篇

TAG:小米運維 |