Nginx内容缓存以及常见参数配置详析

2019-10-17 16:45:09刘景俊

Nginx 缓存相关进程

缓存中还涉及两个额外的NGINX进程:

cache manager 周期性地启动,检查高速缓存的状态。如果高速缓存大小超过 proxy_cache_path 中 max_size 参数设置的限制,则高速缓存管理器将删除最近访问过的数据。在两次缓存管理器启动的间隔,缓存的数据量可能短暂超过配置的大小。 cache loader 只运行一次,NGINX 开始之后。它将有关以前缓存的数据的元数据加载到共享内存区域。一次加载整个缓存可能会消耗足够的资源来在启动后的最初几分钟内降低 NGINX 的性能。要避免这种情况,请通过在 proxy_cache_path 指令中包含以下参数来配置缓存的迭代加载: loader_threshold - 迭代持续时间,以毫秒为单位(默认情况下 200) loader_files - 一次迭代期间加载的最大项目数(默认情况下 100) loader_sleeps - 迭代之间的延迟,以毫秒为单位(默认情况下 50)

在以下示例中,迭代持续数300 毫秒或直到 200 个项目被加载进去:

proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;

其他常用参数

配置示例:

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_cache_key "$host$request_uri$cookie_user";   proxy_cache_min_uses 3;
  proxy_cache_methods GET HEAD POST;
  proxy_cache_valid 200 302 10m;
  proxy_cache_valid 404  1m;
  # proxy_cache_valid any 5m;   proxy_pass http://localhost:8000;
 }
}

对应参数说明:

proxy_cache_key 为更改计算密钥时使用的请求特征,指定缓存的 key,这个不推荐,示例是使用域名,请求url,用户 cookie 来当作 key,意味着一个页面将为不同的用户缓存 n 次,绝大多数情况不需要这样的操作。 proxy_cache_min_uses 为在缓存响应之前必须使用相同密钥的请求的最小次数。 proxy_cache_methods 为指定要被缓存的请求方式的响应值,默认为 GET 和 HEAD,新增其他的需要一起列出来,如上示例所示。 proxy_cache_valid 为响应状态码的缓存时间,示例可以为每个状态码缓存指定时间,也可以使用 any 进行全部状态码的缓存。

清除缓存

需要提前加一个配置,用于标识使用 HTTP PURGE 方法的请求并删除匹配的 URL 对应的缓存。

1.在 http {} 上下文中创建新变量,例如 $purge_method, 他依赖于 $request_method 变量:

http {
 ...
 map $request_method $purge_method {
  PURGE 1;
  default 0;
 }
}

2.在 location {} 块中,已经配置缓存的前提下,引入 proxy_cache_purge 参数来指定清除缓存请求的条件。例如在上一步指定的 $request_method

server {
 listen  80;
 server_name www.example.com;

 location / {
  proxy_pass https://localhost:8002;
  proxy_cache mycache;

  proxy_cache_purge $purge_method;
 }
}