在代理服务器的磁盘中保存请求目标的内容,加快响应速度,减少应用服务器(后端服务器)上的资源 开销,比如多客户端请求相同的资源,代理缓存命中后,对于应用服务器来说,只发生了一次资源调 度。
而浏览器上的缓存配置,一般来说是用来减少本地IO的,请求目标的内容会存放在浏览器本地。
# 代理服务器配置: proxy_cache_path /data/nginx/cache max_size=10g levels=1:2 keys_zone=nginx_cache:10m inactive=60m use_temp_path=off; upstream nginx { server 192.168.0.114; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; proxy_pass http://nginx; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache nginx_cache; proxy_cache_key $host$uri$is_args$args; proxy_cache_valid 200 304 302 1d; } } proxy_cache_path /data/nginx/cache #缓存资源存放路径,如果cache不存在会自动创建。 levels #设置缓存资源的递归级别,默认为levels=1:2,表示Nginx为将要缓存的资源生成的key从后依次设置两级保存。 levels=1:2:2 #定义缓存目录结构层次,1:2:2 可以生成2^4x2^8x2^8=1048576个目录 key_zone #在共享内存中设置一块存储区域来存放缓存的key和metadata,这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key max_size #最大cache空间,如果不指定,会使用掉所有disk space,当达到配额后,会删除不活跃的cache文件 inactive #缓存有效时间,未被访问文件在缓存中保留时间,本配置中如果60分钟未被访问则不论状态是否为 expired #缓存控制程序会删掉文件。inactive默认是10分钟。需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件 use_temp_path #如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝 proxy_cache zone | off #默认off指明调用的缓存,或关闭缓存机制;Context:http, server, location proxy_cache_key string #缓存中用于“键”的内容,默认值:proxy_cache_key $scheme$proxy_host$request_uri; proxy_cache_valid [code ...] time #定义对特定响应码的响应内容的缓存时长,定义在http{...}中,示例:proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;
在http配置定义缓存信息 proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2:2 keys_zone=proxycache:20m inactive=120s max_size=1g; 说明:proxycache:20m 指内存中缓存的大小,主要用于存放key和metadata(如:使用次数) max_size=1g 指磁盘存入文件内容的缓存空间最大值
在server中调用
调用缓存功能,需要定义在相应的配置段,如server{...}; proxy_cache proxycache; proxy_cache_key $request_uri; proxy_cache_valid 200 302 301 1h; proxy_cache_valid any 1m; proxy_cache_use_stale; proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ... #在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端 proxy_cache_methods GET | HEAD | POST ...; #对哪些客户端请求方法对应的响应进行缓存,GET和HEAD方法总是被缓存