新闻中心

记录团队成长点滴以及对技术、理念的探索,同时我们乐于分享!

Nginx如何缓存配置?

2020-07-12 11:08:45 分类:技术学堂

1.浏览器缓存

静态资源缓存用expire

location ~*  .(jpg|jpeg|png|gif|ico|css|js)$ {

   expires 2d;

}

Response Header中添加了Expires和Cache-Control,

静态资源包括(一般缓存)

普通不变的图像,如logo,图标等

js、css静态文件

可下载的内容,媒体文件

协商缓存(add_header ETag/Last-Modified value)

HTML文件

经常替换的图片

经常修改的js、css文件

基本不变的API接口

不需要缓存

用户隐私等敏感数据

经常改变的api数据接口

2.代理层缓存

//缓存路径,inactive表示缓存的时间,到期之后将会把缓存清理

proxy_cache_path /data/cache/nginx/ levels=1:2 keys_zone=cache:512m inactive = 1d max_size=8g;

 

location / {

    location ~ \.(htm|html)?$ {

        proxy_cache cache;

        proxy_cache_key    $uri$is_args$args;     //以此变量值做HASH,作为KEY

        //HTTP响应首部可以看到X-Cache字段,内容可以有HIT,MISS,EXPIRES等等

        add_header X-Cache $upstream_cache_status;

        proxy_cache_valid 200 10m;

        proxy_cache_valid any 1m;

        proxy_pass  http://real_server;

        proxy_redirect     off;

    }

    location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {

        root /data/webapps/edc;

        expires      3d;

        add_header Static Nginx-Proxy;

    }

}

在本地磁盘创建一个文件目录,根据设置,将请求的资源以K-V形式缓存在此目录当中,KEY需要自己定义(这里用的是url的hash值),同时可以根据需要指定某内容的缓存时长,比如状态码为200缓存10分钟,状态码为301,302的缓存5分钟,其他所有内容缓存1分钟等等。

可以通过purger的功能清理缓存。

AB测试/个性化需求时应禁用掉浏览器缓存。