缓存文件-以便启动恢复

  1. 语法:proxy_cache_path path keys_zone=name:size #文件路径与缓存名称大小
  2. 默认值:proxy_cache_path off;
  3. 上下文:http
可选参数 含义
level path的目录层级
use_ temp_path off直接使用path路径; on使用proxy_temp_path路径
inactive 在指定时间内没有被访问缓存会被清理;默认10分钟
max_size 设定最大的缓存文件大小,超过将由CM清理
manager_files CM清理一次缓存文件,最大清理文件数;默认100
manager_sleep CM清理一次后进程的休眠时间;默认200毫秒
manager_threshold CM清理一 次最长耗时;默认50毫秒
loader_files CL载入文件到共享内存,每批最多文件数;默认100
loader_sleep CL加载缓存文件到内存后,进程休眠时间;默认200毫秒
loader_threshold CL每次载入文件到共享内存的最大耗时;默认50毫秒

CM:处理进程

缓存key设置

  1. 语法:proxy_cache_key string;
  2. 默认值:proxy_cache_key $scheme $proxy_host$request_uri ; # http://host/uri
  3. 上下文:httpserverlocation
  4. 语法:proxy_cache_valid [code]time; # 对指定状态码进行缓存
  5. 上下文: http serverlocation
  6. 默认配置示例: proxy_cache_valid 60m; #只对200、301、 302响应码缓存

缓存状态 upstream_ cache_status

  1. MISS :未命中缓存
  2. HIT :命中缓存
  3. EXPIRED :缓存过期
  4. STALE:命中了陈|旧缓存;
  5. REVALIDDATED : Nginx验证陈旧缓存依然有效
  6. UPDATING :内容陈旧,但正在更新
  7. BYPASS :响应从原始服务器获取

配置示例

  1. proxy_cache_path /opt/nginx/cache_temp levels=2:2 keys_zone=cache_zone:30m max_size=32g inactive=60m use_temp_path=off;
  2. upstream cache_server {
  3. server 192.168.184.20:1010;
  4. server 192.168.184.20: 1011;
  5. }
  6. server {
  7. listen 80;
  8. server_name cache.kutian.edu;
  9. location / {
  10. proxy_cache cache_zone ;
  11. proxy_cache_valid 200 5m;
  12. proxy_cache_key $scheme$proxy_host$request_uri;
  13. add_header Nginx-Cache-Status "$upstream_cache_status"; # 显示缓存状态
  14. proxy_pass http://cache_server;
  15. }
  16. }
  17. # 上游服务器可以在响应时修改header X-Accel-Expires 定义缓存时间。失效 状态会变为 EXPIRED

对于 特定key 不缓存

  1. proxy_no_cache
  2. #表明用户访问login和search两个url的时候,变量$nocache 设置值
  3. if ($request_uri ~ ^/(login|search)){
  4. set $nocache 1;
  5. }
  6. location / {
  7. #当变量$nocache 有值,不缓存。
  8. proxy_no_cache $nocache;
  9. }
  10. proxy_cache_bypass
  11. #该指令的每个参数都指定了一个条件,只有请求满足其中的任何一个条件,并且参数的值不是0,则Nginx会把请求转发到后端的服务而不会使用缓存。

缓存大量失效解决

限制请求
  1. proxy_cache_lock on|off 默认off #限制相同路径同时请求 单个请求返回响应,后续相同路径才能再次请求
  2. proxy_cache_lock_timeout time 默认5s # 超时时间后 剩余请求同时请求
  3. proxy_cache_lock_age time 默认5s #限制超时未返回 一个一个请求

启用陈旧缓存
  1. proxy_cache_use_stale error|timeout|invalid_header|updating|http_500|http_502|http_503|http_504|http_403|http_404|off
  2. 默认值: proxy_cache_use_stale off ;
  3. proxy_cache_background_update on|off 默认off # 由nginx请求更新缓存,让客户端先用旧缓存
可选参数 含义
error 与上游建立连接、发送请求、读取响应头出错时
timeout 与上游建立连接、发送请求、读取响应头超时时
invalid_header 无效头部时
updating 缓存过期,正在更新时
http_状态码

缓存清除操作

第三方nginx缓存清除模块。使用可以加—add-module ngx_cache_purge文件路径编译新版

  1. location ~ /cache_purge(/.*) {
  2. proxy_cache_purge cache_zone $host$1;
  3. }
  4. # cache_zone 对应缓存 keys_zone 这个的名称
  5. # $host$1; 对应缓存key