nginx 缓存问题

NGINX通常作为应用程序堆栈中的反向代理或负载平衡器部署,并具有一整套缓存功能

如何设置和配置基本缓存

只需要两个指令即可启用基本缓存:[proxy_cache_path](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path)[proxy_cache](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache)。该proxy_cache_path指令设置缓存的路径和配置,proxy_cache指令激活它

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g 
                 inactive=60m use_temp_path=off;

server {
    # ...
    location / {
        proxy_cache my_cache;
        proxy_pass http://my_upstream;
    }
}

proxy_cache_path指令的参数定义了以下设置:

  • 缓存的本地磁盘目录称为/ path/ to/cache /
  • levels/ path/ to/cache /下设置一个两级目录层次结构。在单个目录中包含大量文件会降低文件访问速度,因此我们建议对大多数部署使用两级目录层次结构。如果levels未包含该参数,NGINX会将所有文件放在同一目录中。
  • keys_zone设置共享内存区域,用于存储缓存键和元数据,例如使用计时器。将键的拷贝放入内存可以使NGINX在不检索磁盘的情况下快速决定一个请求是HIT还是MISS,这样大大提高了检索速度。。1 MB区域可以存储大约8,000个密钥的数据,因此示例中配置的10 MB区域可以存储大约80,000个密钥的数据。
  • max_size设置缓存大小的上限(在本例中为10G字节)。它是可选的; 不指定值允许缓存增长以使用所有可用磁盘空间。当缓存大小达到限制时,称为缓存管理器的进程将删除最近最少用于将缓存大小恢复到限制之下的文件。
  • inactive指定项目在未被访问的情况下可以保留在缓存中的时间长度。在上面的例子中,如果一个文件在60分钟之内没有被请求,则缓存管理将会自动将其在内存中删除,不管该文件是否过期。默认值为10分钟(10m)。非活动内容与过期内容不同。NGINX不会自动删除缓存控件头定义的已过期内容(Cache-Control:max-age=120例如)。过期(陈旧)内容仅在指定时间内未被访问时被删除inactive。访问过期内容时,NGINX会从原始服务器刷新它并重置inactive计时器。
  • NGINX首先将发往高速缓​​存的文件写入临时存储区域,该use_temp_path=off指令指示NGINX将它们写入将被高速缓存的相同目录。我们建议您将此参数设置off为避免在文件系统之间进行不必要的数据复制。use_temp_path在NGINX 1.7.10和NGINX Plus R6中引入。

nginx缓存优先级

推荐阅读更多精彩内容