Nginx proxy反向代理 緩存處理流程

接收到客戶端的請求以後緩存模塊處理流程


緩存流程分爲兩部分,的一部分是接收到客戶端發來的請求。首先對於用戶的請求是否可以使用緩存,如果在當前的location下有proxy_cache指令纔會繼續往下走,如果是否的話就直接向上遊發送請求。當location中有proxy_cache指令會使用proxy_cache_method來判斷對哪個method方法使用緩存返回響應,比如get,head,post,否則我們不使用緩存,默認的時候是get和head方法我們才使用緩存當中的內容,這個指令可以出現在http當中,所以可以使用向下合併的規則。當用戶請求匹配到cache_methods之後,請求的methods是head方法接下來會根據proxy_cache_convert_head指令將其轉化爲get方法。再接下來會根據proxy_cache_key關鍵字$scheme$proxy_host$request_uri生成關鍵字。根據關鍵字生成md5。

 

根據關鍵字檢查cache_pass指令指明對於滿足條件的哪些請求時不緩存的,條件後面時一些變量的值,當變量值爲真代表不緩存直接向上遊發送請求。當變量值是否的時候使用緩存的時候就會在proxy_cache指令裏面指定的共享內存裏尋找緩存是否存在,如果緩存存在讀取緩存內容,如果緩存不存在訪問上游以後等上游的響應回來了再更新我的緩存。緩存不存在在共享內存當中分配節點再走下面的流程,如果存在就會去更新LRU鏈表及節點計數,因爲緩存是有LRU淘汰的,因爲剛剛訪問過這個緩存,所以要將其移動到不容易淘汰的地方並且更新LRU鏈表。

 

如果是錯誤類響應404或者500就直接向上遊發送請求用新的響應來更新緩存,如果不是錯誤類響應再判斷文件是否存在,存在且超過了proxy_cache_min_uses就根據proxy_cache_background_update生成子請求,由這個子請求去更新緩存,同時使用過期的緩存向下遊發送響應。如果沒有過期就直接向下遊返回響應就行。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章