nginx:緩存·

緩存是提升瀏覽器訪問效率最有效的方法

不僅要考慮nginx要作爲緩存服務時的使用方法,還需要考慮瀏覽器中緩存生效的場景(因爲瀏覽器中緩存是否生效,可以通過nginx指令控制,而瀏覽器的緩存對用戶的體驗提升也是最大的)

瀏覽器緩存:

   優點:

      (1)使用有效緩存時,沒有網絡消耗,速度最快

      (2)即使有網絡消耗,但對失效緩存使用304響應做到網絡流量消耗最小化

   缺點:

        僅提升一個用戶的體驗

 

nginx緩存

    優點:

          (1)提升所有用戶的體驗

          (2)相比瀏覽器緩存,有效降低上游服務的負載

          (3)通過304響應減少nginx與上游服務間的流量消耗

   缺點:

           用戶仍然保持網絡消耗

 

 同時使用瀏覽器緩存與nginx緩存.

1.etag指令

   語法:etag  on | off;

   默認:etag  on;

   放置位置:http,server,location

2.expires指令

   語法:expires  [ modified ] time;expires epoch |  max | off ; 

   默認:expires off;

   放置位置:http,server,location,if in  location

        off : 不添加或者修改Expires和Cache-Control字段

        epoch: Expires : 1970  00:00:01GMT               Cache-Control:no-cache

        time:一天內的具體時刻可以加@。正數:設定Cache-Control時間,計算出expires。負數:Cache-Control:no-cache,計算出expires

 

 

not_modified過濾模塊

   功能:客戶端擁有緩存,但不確定緩存是否過期,於是在請求中傳入If-Modified-Since或者If-None-Match頭部,該模塊通過將其值與響應中的Last-Modified值相比較,決定是通過200返回全部內容,還是僅返回304 Not Modified頭部,表示瀏覽器仍使用之前的緩存

  使用前提:原返回響應碼爲200

1.if_modified_since指令

   語法:if_modified_since  off |  exact | before;

   默認:if_modified_since  exact;

   放置位置:http,server,location

        off : 忽略請求中的if_modified_since頭部

        exact:精確匹配if_modified_since頭部與last_modified的值

       before:若if_modified_since大於等於last_modified的值,則返回304

         

nginx緩存:定義存放緩存的載體

1.proxy_cache 指令 

   語法:proxy_cache  zone | off

   默認:proxy_cache  off;

   放置位置:http,server,location

2.proxy_cache_path指令(存放緩存文件路徑)

   語法:proxy_cache_path  path;

   默認:空

   放置位置:http

 

3.proxy_cache_valid指令(緩存什麼樣的響應)

   語法:proxy_cache_valid   [ code ] time;

   默認:空

   放置位置:http,server,location

4.proxy_cache_method指令(對哪個method方法使用緩存返回響應)

   語法:proxy_cache_method  GET | HEAD | POST;

   默認:proxy_cache_method  GET  HEAD;

   放置位置:http,server,location

 

如何減輕緩存失效時上游服務器的壓力

合併回源請求---減輕峯值流量下的壓力

1.proxy_cache_lock指令(打開on時,同一時間僅第一個請求發向上游,其他請求等待第一個響應返回或者超時後,使用緩存響應客戶端)

   語法:proxy_cache_lock  on |  off

   默認:proxy_cache_lock off;

   放置位置:http,server,location

2.proxy_cache_lock_timeout 指令(等待第一個請求返回響應的最大時間,到達後直接向上遊發送請求,但不緩存響應)

   語法:proxy_cache_lock_timeout   time;

   默認:proxy_cache_lock_timeout   5s;

   放置位置:http,server,location

3.proxy_cache_lock_age 指令(上一個請求返回響應的超時時間,到達後再放行一個請求發向上游)

   語法:proxy_cache_lock_age   time;

   默認:proxy_cache_lock_age   5s;

   放置位置:http,server,location

減少回源請求---使用stale陳舊的緩存

1.proxy_cache_use_stale 指令(返回舊緩存,提升體驗)

   語法:proxy_cache_use_stale   error | timeout | invalid_head | updating;

   默認:proxy_cache_lock_age   off;

   放置位置:http,server,location

2.proxy_cache_background_update 指令(當使用proxy_cache_use_stale允許使用過期緩存時,將同步生成一個子請求,通過訪問上游服務更新過期的緩存)

   語法:proxy_cache_background_update   on  | off;

   默認:proxy_cache_background_update   off;

   放置位置:http,server,location

緩存有問題的響應

1.proxy_cache_revalidate 指令(更新緩存時,使用If-Modified-Since和If-None-Match作爲請求頭部,預期內容未發生變更時通過304來減少傳輸的內容)

   語法:proxy_cache_revalidate   on  | off;

   默認:proxy_cache_revalidate   off;

   放置位置:http,server,location

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