假設有兩台實體機,他們分屬于不同的域名,以webgame的遊戲營運商和開發商為例,營運商需要擷取遊戲中的排行資料,開發商為了過多對遊戲伺服器的請求,會在發起請求的機器上設定緩存(或是讓營運商定時過來抓取一次資料)
nginx設定web緩存,需要用到的相關指令:
1、proxy_cache
2、proxy_cache_path
3、proxy_cache_valid
需要注意的事項:
1、windows下面設定緩存不會在指定的path生成的緩存檔案
2、指定的path上一級目錄需要存在,否則會報錯 (假設緩存檔案存放于/usr/local/cc/abc,那麼cc目錄需要事先建立)
3、proxy_cache_path 隻能存放于http中,不能放置于server或location
具體的執行個體:
proxy_cache_path /usr/local/nginx_rank_cache levels=1:2 keys_zone=rankCache:1m inactive=1h max_size=30m;
第一次請求過來時,将對應将生成如下目錄:

上面指令中 “/usr/local/nginx_rank_cache”為緩存存放的目錄路徑
levels指定該緩存空間有兩層hash目錄,第一層目錄為1個字母,第二層為2個字母,對應上圖中的“3”和“b6”
keys_zone=rankCache 參數用來為這個緩存區起名(proxy_cache 指令需要用到 其後對應緩存區名稱)
:1m 指記憶體緩存空間大小為1MB
inactive 的1h指如果緩存資料在1小時(天:d、秒:s、分:m)内沒有被通路,将自動被删除;
max_size=30m 指硬碟緩存大小為30MB
打開上圖中的緩存檔案,可以看到如下資訊(編碼格式有點問題,顯示亂碼了):
用Fiddler抓取第一次請求時的資料,将可以看到如下的響應(在不清除緩存的情況下,過期時間内的請求都直接是Cache,Fiddler抓取不到這樣的請求):
從05:58~17:58中間有12個hours,而nginx上也是這樣設定的:
proxy_set_header host otherdomain.com';
proxy_cache rankCache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 1m;
expires 12h;
proxy_cache_valid指令,可以在http、server、location中使用,如果proxy_cache_valid 不指定狀态碼,直接指定緩存時間,将隻緩存預設的狀态碼(200、301、302),而如果需要對304也指定,則需要寫完整的狀态碼,如上面寫的200 304
還有其它的指令,如:proxy_cache_methods、proxy_cache_min_uses、proxy_cache_key等,根據實際需要自定義。
合理的使用緩存,可以提高頁面通路的速度、節省帶寬~