Web前端之路javaWeb学习转载部分

Nginx作为缓存服务

2019-05-25  本文已影响2人  青衣敖王侯

  上一篇文章讲了Nginx作为代理服务的使用方式,这篇文章我们讲一讲Nginx作为缓存服务是怎么工作的,以及实战的使用。
  先看一张图:


Nginx作为缓存服务

  面对第一次客户端的应用Nginx需要从后端的服务获取数据,对于后续的请求,Nginx若进行了缓存就不再从后端服务获取数据。

1.proxy_cache实战

1.1proxy_cache_path

语法:proxy_cache_path path [levels=levels].只能用在http中。

proxy_cache_path /root/cache levels=1:2 keys_zone=zzm_cache:10m max_size=1g inactive=60m use_temp_path=off;

1.2proxy_cache

  proxy_cache zone | off。默认是关闭的,可以用在http,server,location中。

    location / {
        proxy_cache zzm_cache;
        proxy_pass http://zzm;
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid any 10m;
        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;
    }

1.3编写后端服务

SpringBoot

访问zzm这个路径的时候,会返回配置文件中的spring.s项,具体值可以参考我们的启动设置:


启动3个后台进程

三个后台金正分别对应6000端口,6001端口,6002端口

1.4配置upstream

upstream zzm{
   server 127.0.0.1:6000;
   server 127.0.0.1:6001;
   server 127.0.0.1:6002;
}

所以我们访问ip:port/zzm的时候会自动去访问后台

1.5效果展示:

我们首先注释掉proxy_cache zzm_cache;进行访问,也就是没有缓存的情况下,访问3次:


第一次结果
第二次结果
第三次结果

我们可以看到没有缓存的情况下,会进行轮询访问,每次访问的结果不一样,而且我们的缓存路径什么都没有,让我想起了一首歌空空如也:


缓存路径
  接下来我们把缓存打开,访问3次,只会有下面这个页面:
访问3次都是这个页面
  同时缓存路径有了变化:
发现多了两个目录

好奇的看了下目录下的文件内容:


缓存的文件内容
我们可以看到6000值被缓存下来了,同时key就是我们在浏览器敲击的url,所以我们可以大胆猜想第二次访问的时候就是从这个文件里面把相关的数据拿出来的。

1.6缓存扩展

1.6.1如何清空缓存

1.6.1.1直接rm 缓存目录下所有的文件,但这样会干掉所有的缓存

1.6.1.2使用ngx_cache_purge

1.6.2如何让部分页面不缓存

1.6.2.1proxy_no_cache string可以在http,server,location中配置

proxy_no_cache使用
当我们再次访问http://47.100.199.15/zzm时,发现不会再缓存了。这里的配置文件中我写了很多变量,只要其中一个变量不为0,这个url就不会被缓存。

1.7缓存命中分析

1.7.1方式一:通过设置response的头信息Nginx-Cache

add_header Nging-Cache "$upstream_cache_status";


upstream_cache_status

当我们没有缓存的时候,我们可以看到应答会是MISS:


MISS
如果缓存了:
HIT

1.7.2方式二:通过设置log_format,打印日志分析

现在nginx.conf中加入新的配置项:


nginx.conf

此时我们怒刷前端页面,会发现后端日志如下:


access.log

Nginx的缓存服务就讲到这里,欢迎大家指正

上一篇下一篇

猜你喜欢

热点阅读