nginx 缓存机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 缓存机制相关的知识,希望对你有一定的参考价值。

参考技术A nginx缓存的基本思路
基本思想是利用客户访问的时间局部性原理,对客户已经访问过的内容在Nginx服务器本地建立副本,这样在一段时间内再次访问该数据,就不需要通过Nginx服务器再次向后端服务器发出请求,所以能够减少Nginx服务器与后端服务器之间的网络流量,减轻网络拥塞,同时还能减小数据传输延迟,提高用户访问速度。同时,当后端服务器宕机时,Nginx服务器上的副本资源还能够回应相关的用户请求,这样能够提高后端服务器的鲁棒性。

对于缓存,我们大概会有以下问题:
(1)缓存文件放在哪儿?
(2)缓存的空间大小是否可以限定?
(3)如何指定哪些请求被缓存?
(4)缓存的有效期是多久?
(5)对于某些请求,是否可以不走缓存?

解决这些问题后,nginx的缓存也就基本配置完成了,下面看详细配置过程
开启缓存

要使用缓存,首先要使用 proxy_cache_path 这个指令(必须放在 http 上下文的顶层位置),然后在目标上下文中使用 proxy_cache 指令

配置示例

proxy_cache_path 有两个必填参数,第一个参数为 缓存目录,第二个参数keys_zone指定缓存名称和占用内存空间的大小(注:示例中的10m是对内存中缓存内容元数据信息大小的限制,如果想限制缓存总量大小,需要用 max_size 参数)

proxy_cache 的参数为之前指定的缓存名称

缓存管理的相关进程
在缓存工作中有两个附加进程:
(1)缓存管理器
定期检查缓存状态,看缓存总量是否超出限制,如果超出,就移除其中最少使用的部分
(2)缓存加载器
加载器只在nginx启动后运行一次,把缓存内容的元数据信息加载到内存空间,如果一次性加载全部缓存信息,会大量消耗资源,使nginx在启动后的几分钟里变慢,为避免此问题,有3种加载策略:
loader_threshold – 指定每次加载执行的时间
loader_files – 每次最多加载的数量
loader_sleeps – 每次加载的延时
例如:
proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;
指定缓存哪些请求
nginx默认会缓存所有 get 和 head 方法的请求结果,缓存的key默认使用请求字符串
(1)自定义key
例如 proxy_cache_key " request_uri cookie_nocache arg_comment;
如果任何一个参数值不为空,或者不等于0,nginx就不会查找缓存,直接进行代理转发
综合示例

nginx 缓存机制
三分钟看懂Nginx服务器的缓存原理和机制

nginx 缓存设置

浏览器缓存原理

浏览器缓存

HTTP协议定义的缓存机制(如:Expires;Cache-control等)

2、浏览器无缓存

技术图片

3、客户端有缓存

技术图片

校验过期机制

校验是否过期                Expires、Cache-Control(max-age)

协议中Etag头信息校验        Etag

Last-Modified头信息校验     Last-Modified

技术图片

5、配置语法-expires

添加    Cache-Control、Expires头

Syntax:    expires [modified]  time;

           expires epoch|max|off;

Default:   expires off;                 # 静态缓存

Context:   http,server,location,if in location

    location ~ .*\\.(htm|html)$ 
        expires 24h;
        root  /opt/app/code;
    

动态缓存设置

    upstream imooc 
        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  web01.fadewalk.com;

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


    location / 
        proxy_cache off;
        proxy_pass http://imooc;

        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;
        include proxy_params;
    



查看

技术图片

304 Not Modified

技术图片

技术图片

以上是关于nginx 缓存机制的主要内容,如果未能解决你的问题,请参考以下文章

浏览器缓存机制与Nginx配置调优

初识nginx反向代理和缓存机制

初识nginx反向代理和缓存机制(简单实现)

三分钟看懂Nginx服务器的缓存原理和机制

Varnish缓存机制详细介绍及简单配置

MyBatis 缓存机制分析