本文概述
缓存是指在本地存储信息以加快客户端(例如Web服务器)之间的通信。缓存可以位于客户端, 服务器端或两者都位于。缓存对于处理重复请求的静态或不经常更改的数据很有用。
内容缓存位于客户端和原始服务器之间, 并保存其看到的所有内容的副本。如果客户端请求缓存已存储的内容, 则它将直接返回内容, 而无需联系原始服务器。
在Nginx Plus中, 启用缓存后, Nginx Plus将响应保存在磁盘缓存中, 并使用它们来响应客户端, 而不必每次都代理相同内容的请求。
启用响应缓存
要启用缓存, 请在顶级http {}上下文中添加proxy_cache_path指令。重要且强制性的第一个参数是缓存内容的本地文件系统路径, 而强制键zone参数指定用于存储有关缓存项的元数据的共享内存区的名称和大小:
http {
...
proxy_cache_path /data/nginx/cache keys_zone=one:10m;
}
之后, 在我们要为其缓存服务器响应的上下文(协议类型, 虚拟服务器或位置)中添加proxy_cache指令, 并为proxy_cache_path指令指定key_zone参数定义的区域名称。
http {
...
proxy_cache_path /data/nginx/cache keys_zone=one:10m;
server {
proxy_cache mycache;
location / {
proxy_pass http://localhost:8000;
}
}
}
缓存涉及的Nginx进程
缓存涉及Nginx进程:
定期激活高速缓存管理器以检查高速缓存的状态。如果高速缓存的大小超过了max_size参数对proxy_cache_path指令设置的限制, 则高速缓存管理器将删除最近最少访问的数据。在两次激活高速缓存管理器之间的时间内, 高速缓存的数据可能会(暂时)超过限制。
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;
指定要缓存的请求
默认情况下, NGINX Plus会缓存所有对使用HTTP HEAD和HTTP GET方法发出的请求的响应, 这是第一次从代理服务器接收到此类响应时。作为请求的键, NGINX Plus使用请求字符串。如果请求具有与缓存的响应相同的键或标识符, 则NGINX Plus会将缓存的响应发送到客户端。我们可以在http {}, server {}或location {}上下文中添加各种指令, 以控制缓存哪些响应。
要更改用于计算标识符或密钥的请求特征, 请包括proxy_cache_key指令:
proxy_cache_key "$host$request_uri$cookie_user";
要定义在缓存响应之前必须发出具有相同标识的请求的最小次数, 请包括proxy_cache_min_uses指令:
proxy_cache_min_uses 5;
要使用HEAD和GET以外的方法缓存对请求的响应, 请将它们与HEAD和GET一起列出, 作为proxy_cache_methods指令的参数:
proxy_cache_methods GET HEAD POST;
限制或禁用缓存
默认情况下, 响应会无限期保留在缓存中。仅当高速缓存超过最大配置大小时才将其删除, 然后按自上次请求以来的时间长度顺序进行删除。你可以通过在http {}, server {}或location {}上下文中包含指令来设置缓存的响应被视为有效的时间, 甚至根本不使用它们:
要限制具有特定状态码的缓存响应被视为有效的时间, 请使用proxy_cache_valid指令:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
在此示例中, 具有代码200或302的响应被认为有效期为10分钟, 具有代码404的响应被认为有效期为1分钟。要定义具有所有状态代码的响应的有效时间, 请将any指定为第一个参数:
proxy_cache_valid any 5m;
要指定NGINX Plus不向客户端发送缓存的响应的条件, 请包括proxy_cache_bypass指令。每个参数定义一个条件, 并由几个变量组成。如果至少一个参数不为空且不等于” 0″(零), 则NGINX Plus不会在缓存中查找响应, 而是立即将请求转发给后端服务器。
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
要定义NGINX Plus根本不缓存响应的条件, 请添加proxy_no_cache指令:
proxy_no_cache $http_pragma $http_authorization;