Nginx如何配置基础缓存

// /path/to/cache/:用于缓存的本地磁盘目录
// levels :在 /path/to/cache/ 设置了一个两级层次结构的目录。
//            将大量的文件放置在单个目录中会导致文件访问缓慢,
//            所以针对大多数部署,我们推荐使用两级目录层次结构。如果 levels 参数没有配置,则 Nginx 会将所有的文件放到同一个目录中。
// keys_zone :设置一个共享内存区,该内存区用于存储缓存键和元数据,有些类似计时器的用途。
//           将键的拷贝放入内存可以使 Nginx 在不检索磁盘的情况下快速决定一个请求是 HIT 还是 MISS,这样大大提高了检索速度。
//           一个 1MB 的内存空间可以存储大约 8000 个 key,那么上面配置的 10MB 内存空间可以存储差不多 80000 个 key。
// max_size :设置了缓存的上限(在上面的例子中是 10G)。
//                这是一个可选项;如果不指定具体值,那就是允许缓存不断增长,占用所有可用的磁盘空间。
//                当缓存达到这个上限,处理器便调用 cache manager 来移除最近最少被使用的文件,这样把缓存的空间降低至这个限制之下。
// inactive :指定了项目在不被访问的情况下能够在内存中保持的时间。
//            在上面的例子中,如果一个文件在 60 分钟之内没有被请求,则缓存管理将会自动将其在内存中删除,不管该文件是否过期。
//            该参数默认值为 10 分钟(10m)。注意,非活动内容有别于过期内容。Nginx 不会自动删除由缓存控制头部指定的过期内容。
//            过期内容只有在 inactive 指定时间内没有被访问的情况下才会被删除。如果过期内容被访问了,那么 Nginx 就会将其从原服务器上刷新,并更新对应的 inactive 计时器。
// use_temp_path:Nginx 最初会将注定写入缓存的文件先放入一个临时存储区域,use_temp_path=off 命令指示 Nginx 将在缓存这些文件时将它们写入同一个目录下。
//                强烈建议将参数设置为 off 来避免在文件系统中不必要的数据拷贝。
proxy_cache_path /path/to/hdd1 levels=1:2 keys_zone=my_cache_hdd1:10m max_size=10g inactive=60m use_temp_path=off;
proxy_cache_path /path/to/hdd2 levels=1:2 keys_zone=my_cache_hdd2:10m max_size=10g inactive=60m use_temp_path=off;

// 跨多硬盘分割缓存
split_clients $request_uri $my_cache {
    50% "my_cache_hdd1";
    50% "my_cache_hdd2";
}


server {
    ...
    location / {
        proxy_cache my_cache;
        // 指示 Nginx 在刷新来自服务器的内容时使用 GET 请求。
        // 如果客户端的请求项已经被缓存过了,但是在缓存控制头部中定义为过期,那么 Nginx 就会在 GET 请求中包含 If-Modified-Since 字段,发送至服务器端。
        // 这项配置可以节约带宽,因为对于 Nginx 已经缓存过的文件,服务器只会在该文件请求头中 Last-Modified 记录的时间内被修改时才将全部文件一起发送。
        proxy_cache_revalidate on;
        // 该指令设置同一链接请求达到几次即被缓存,默认值为 1 。
        // 当缓存不断被填满时,这项设置便十分有用,因为这确保了只有那些被经常访问的内容会被缓存。
        proxy_cache_min_uses 3;
        // updating 参数告知 Nginx 在客户端请求的项目的更新正在原服务器中下载时发送旧内容,而不是向服务器转发重复的请求。
        // 第一个请求陈旧文件的用户不得不等待文件在原服务器中更新完毕。陈旧的文件会返回给随后的请求直到更新后的文件被全部下载。
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        // 当多个客户端请求一个缓存中不存在的文件(或称之为一个 MISS),只有这些请求中的第一个被允许发送至服务器。
        // 其他请求在第一个请求得到满意结果之后在缓存中得到文件。如果不启用 proxy_cache_lock,则所有在缓存中找不到文件的请求都会直接与服务器通信。
        proxy_cache_lock on;
        proxy_pass http://my_upstream;
    }

}

posted on 2019-07-02 10:16  果然朝辉  阅读(824)  评论(0编辑  收藏  举报

导航