天天看點

nginx的反向代理緩存

假設有兩台實體機,他們分屬于不同的域名,以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;

第一次請求過來時,将對應将生成如下目錄:

nginx的反向代理緩存
nginx的反向代理緩存

上面指令中 “/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

打開上圖中的緩存檔案,可以看到如下資訊(編碼格式有點問題,顯示亂碼了):

nginx的反向代理緩存

用Fiddler抓取第一次請求時的資料,将可以看到如下的響應(在不清除緩存的情況下,過期時間内的請求都直接是Cache,Fiddler抓取不到這樣的請求):

nginx的反向代理緩存
nginx的反向代理緩存

從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等,根據實際需要自定義。

合理的使用緩存,可以提高頁面通路的速度、節省帶寬~

繼續閱讀