upstream zachary.sh.cn{
server 192.168.10.1:8081;
server 192.168.10.2:8082;
}
proxy_cache_path /cache levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m
use_temp_path=off;
server {
listen 80;
server_name zachary.sh.cn;
index index.html;
location / {
proxy_pass http:// zachary.sh.cn;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_cache cache;
proxy_cache_valid 200 304 6h;
proxy_cache_valid any 6m;
proxy_cache_key $uri$request_body;
proxy_cache_methods GET POST;
add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
}
- levels :按照两层目录分层。
- key_zone :在共享内存中设置一块存储区域来存放缓存的 key 和 metadata(类似使用次数),Nginx 可以快速判断一个请求是否命中缓存,1MB 可以存储 8000 个 key,10MB 可以存储 80000 个 key。
- max_size :最大缓存空间,如果不指定,会使用所有硬盘空间,当达到配额后,会删除最少使用的缓存文件。
- inactive :未被访问文件在缓存中的保留时间。如果文件 60 分钟未被访问,则不论状态是否为 expired,缓存控制程序都会删掉文件。inactive 默认是 10 分钟。需要注意的是,inactive 和 expired 配置项的含义是不同的,expired 只是使缓存过期,但不会删除缓存文件,inactive 是删除指定时间内未被访问的缓存文件。
- use_temp_path :如果为 off,则 Nginx 会将缓存文件直接写入指定的缓存文件中,而不是使用 temp_path 存储。official 建议为 off,因为这可以避免文件在不同文件系统中被不必要拷贝。
- proxy_cache :用于启用 proxy 缓存,并指定 key_zone。另外,如果 proxy_cache 为 off,则表示关闭缓存。
- proxy_cache_valid :状态码 200|304 的过期时间为 6h,其余状态码 6 分钟过期。
- proxy_cache_key :缓存的 key,一般为 URL+ 请求参数。
- proxy_cache_methods :支持缓存的请求方式。
- add_header :增加头信息,观察客户端 responce 是否命中。
- proxy_next_upstream :出现 502~504 或其他错误,会跳过此台服务器访问下一台服务器。
其中,$upstream_cache_status 的可能值如下。
- MISS:响应在缓存中找不到,所以需要在服务器中取得。
- HIT:响应包含来自缓存的最新且有效的内容。
- STALE:内容陈旧是因为原始服务器不能正确响应。需要配置 proxy_cache_use_stale。
- UPDATING:内容过期了,是因为相对于之前的请求,响应的入口(entry)已经更新,并且 proxy_cache_use_stale 的 updating 已被设置。
- EXPIRED:缓存中的某一项过期了,来自原始服务器的响应,包含最新的内容。
- REVALIDATED:proxy_cache_revalidate 命令被启用,经过 Nginx 检测得知当前的缓存内容依然有效(If-Modified-Since 或者 If-None-Match)。
清除 Nginx 缓存的方法如下:
•手动删除已缓存的数据,如:rm -rf /cache/*。
•通过 ngx_cache_purge 扩展模块指定 URL 来清理缓存。
安装 ngx_cache_purge:
wget http:// labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar -zxvf ngx_cache_purge-2.3.tar.gz
./configure –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –add-module=../ngx_cache_purge-2.3
make
make install
查看 Nginx 插件进程:
ps -ef|grep nginx
nginx:master process /usr/local/nginx/sbin/nginx
nginx:worker process
nginx:cache manager process // 插件进程
nginx:cache loader process // 插件进程
此时可以通过 URL 路线来清除缓存。
Nginx