// /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; } }