再回首之Nginx(七) 缓存服务


引言

  • 静态资源WEB服务
  • 代理服务
  • 负载均衡调度器SLB
  • 动态缓存

本文介绍Nginx的最后一种使用场景----缓存服务。


缓存服务

1.缓存类型

再回首之Nginx(七) 缓存服务_第1张图片

为什么要用到nginx作缓存服务呢?
首先,其实用到缓存就是为了减少后端的压力,让所有的请求都能集中在前端就能取到数据,因为前端是很好的去中心化,对于后端往往是集中式的。对于网站设计呢,我们更希望将所有的请求集中在前端处理。

再回首之Nginx(七) 缓存服务_第2张图片
服务端缓存

如果缓存放在服务端,那我们称呼它为服务端缓存,服务端缓存最常见的就是memory-cache、redis这种存取key-value型的数据

再回首之Nginx(七) 缓存服务_第3张图片
代理缓存

当缓存集中放在代理或者中间件上,我们称呼为代理缓存。它的内容是在服务端获取到的,然后再缓存在代理端一份,直接返回给客户端使用。

再回首之Nginx(七) 缓存服务_第4张图片
客户端缓存

缓存在浏览器上,称呼为客户端缓存

再回首之Nginx(七) 缓存服务_第5张图片

proxy_cache配置语法

Syntax: proxy_cache_path path [levels=levels]
        [use_temp_path=on|off] keys_zone=name:size [inactive=time] 
        [max_size=size] [manager_files=number] [manager_sleep=time] 
        [manager_threshold=time] [loader_files=number] 
        [loader_sleep=time] [loader_threshold=time] [purger=on|off] 
        [purger_files=number] [purger_sleep=time]       
        [purger_threshold=time];
Default:—
Context:http
Syntax:proxy_cache zone | off;
Default:proxy_cache off;
Context:http, server, location

缓存过期周期

Syntax: proxy_cache_valid [code ...] time;
Default:    —
Context:    http, server, location

缓存的维度

Syntax:proxy_cache_key string;
Default:proxy_cache_key $scheme$proxy_host$request_uri;
Context:http, server, location

配置场景:

upstream{
  server 116.62.103.228:8001;
  server 116.62.103.228:8002;
  server 116.62.103.228:8003;
}

proxy_cache_path /opt/app/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=60m use_temp_path=off;

server{
  listen 80;
  server_name localhost www.gongxu8023.xin

  access_log /var/log/nginx/test_proxy.access.log main;

  location /{
    proxy_cache imooc_cache;
    proxy_pass http://imooc;
    proxy_cache_valid 200 304 12h;
    proxy_cache_valid any 10min;
    proxy_cache_key $host$uri$is_args$args;
    add_header Nginx-Cache "$upstream_cache_status";

    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    include proxy_params;
  } 

}

levels=1:2 的意思是按两层分级
keys_zone 指的是开辟zone的名字
inactive=60m 指的是在60分钟之内,如果这个缓存文件没有被访问过,就把它清理掉
use_temp_path建议将它关闭

add_header是返回客户端时向response中添加头信息。

proxy_next_upstream 指的是当出现error、timeout等原因导致无法访问后端服务的话,直接跳过到下一个后端服务。

补充:如何清理指定缓存

  • 方式一、rm -rf 缓存目录内容
  • 方式二、第三方扩展模块ngx_cache_purge

补充:如何让部分页面不缓存

Syntax: proxy_no_cache string ...;
Default:--;
Context:http,server,location;

示例:

upstream{
  server 116.62.103.228:8001;
  server 116.62.103.228:8002;
  server 116.62.103.228:8003;
}

proxy_cache_path /opt/app/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=60m use_temp_path=off;

server{
  listen 80;
  server_name localhost www.gongxu8023.xin

  access_log /var/log/nginx/test_proxy.access.log main;

  if($request_uri ~ ^/(url3)|login|register|password\/reset){
    set $cookie_nocache 1;
  }

  location /{
    proxy_cache imooc_cache;
    proxy_pass http://imooc;
    proxy_cache_valid 200 304 12h;
    proxy_cache_valid any 10min;
    proxy_cache_key $host$uri$is_args$args;
    proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
    proxy_no_cache $http_pragma $http_authorization;
    add_header Nginx-Cache "$upstream_cache_status";

    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    include proxy_params;
  } 

}

大文件分片请求

Syntax:slice size;
Default:slice 0;
Context:http,server,location;
再回首之Nginx(七) 缓存服务_第6张图片

优势:每个子请求收到的数据都会形成一个独立文件,一个请求断了,其他请求不受影响。

缺点:当文件很大或者slice很小的时候,可能会导致文件描述符耗尽等情况。

你可能感兴趣的:(再回首之Nginx(七) 缓存服务)