Nginx缓存基础

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;
    }
}
  1. levels :按照两层目录分层。
  2. key_zone :在共享内存中设置一块存储区域来存放缓存的 key 和 metadata(类似使用次数),Nginx 可以快速判断一个请求是否命中缓存,1MB 可以存储 8000 个 key,10MB 可以存储 80000 个 key。
  3. max_size :最大缓存空间,如果不指定,会使用所有硬盘空间,当达到配额后,会删除最少使用的缓存文件。
  4. inactive :未被访问文件在缓存中的保留时间。如果文件 60 分钟未被访问,则不论状态是否为 expired,缓存控制程序都会删掉文件。inactive 默认是 10 分钟。需要注意的是,inactive 和 expired 配置项的含义是不同的,expired 只是使缓存过期,但不会删除缓存文件,inactive 是删除指定时间内未被访问的缓存文件。
  5. use_temp_path :如果为 off,则 Nginx 会将缓存文件直接写入指定的缓存文件中,而不是使用 temp_path 存储。official 建议为 off,因为这可以避免文件在不同文件系统中被不必要拷贝。
  6. proxy_cache :用于启用 proxy 缓存,并指定 key_zone。另外,如果 proxy_cache 为 off,则表示关闭缓存。
  7. proxy_cache_valid :状态码 200|304 的过期时间为 6h,其余状态码 6 分钟过期。
  8. proxy_cache_key :缓存的 key,一般为 URL+ 请求参数。
  9. proxy_cache_methods :支持缓存的请求方式。
  10. add_header :增加头信息,观察客户端 responce 是否命中。
  11. 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

本文链接:

https://coolhu.com/Nginx_cache.html

你必须登录后才能发表评论

0 评论