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

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