缓存文件-以便启动恢复
语法:proxy_cache_path path keys_zone=name:size #文件路径与缓存名称大小默认值:proxy_cache_path off;上下文: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设置
语法:proxy_cache_key string;默认值:proxy_cache_key $scheme $proxy_host$request_uri ; # http://host/uri上下文:http、server、location语法:proxy_cache_valid [code]time; # 对指定状态码进行缓存上下文: http、 server、location默认配置示例: proxy_cache_valid 60m; #只对200、301、 302响应码缓存
缓存状态 upstream_ cache_status
MISS :未命中缓存HIT :命中缓存EXPIRED :缓存过期STALE:命中了陈|旧缓存;REVALIDDATED : Nginx验证陈旧缓存依然有效UPDATING :内容陈旧,但正在更新BYPASS :响应从原始服务器获取
配置示例
proxy_cache_path /opt/nginx/cache_temp levels=2:2 keys_zone=cache_zone:30m max_size=32g inactive=60m use_temp_path=off;upstream cache_server {server 192.168.184.20:1010;server 192.168.184.20: 1011;}server {listen 80;server_name cache.kutian.edu;location / {proxy_cache cache_zone ;proxy_cache_valid 200 5m;proxy_cache_key $scheme$proxy_host$request_uri;add_header Nginx-Cache-Status "$upstream_cache_status"; # 显示缓存状态proxy_pass http://cache_server;}}# 上游服务器可以在响应时修改header X-Accel-Expires 定义缓存时间。失效 状态会变为 EXPIRED
对于 特定key 不缓存
proxy_no_cache#表明用户访问login和search两个url的时候,变量$nocache 设置值if ($request_uri ~ ^/(login|search)){set $nocache 1;}location / {#当变量$nocache 有值,不缓存。proxy_no_cache $nocache;}proxy_cache_bypass#该指令的每个参数都指定了一个条件,只有请求满足其中的任何一个条件,并且参数的值不是0,则Nginx会把请求转发到后端的服务而不会使用缓存。
缓存大量失效解决
限制请求
proxy_cache_lock on|off 默认off #限制相同路径同时请求 单个请求返回响应,后续相同路径才能再次请求proxy_cache_lock_timeout time 默认5s # 超时时间后 剩余请求同时请求proxy_cache_lock_age time 默认5s #限制超时未返回 一个一个请求
启用陈旧缓存
proxy_cache_use_stale error|timeout|invalid_header|updating|http_500|http_502|http_503|http_504|http_403|http_404|off默认值: proxy_cache_use_stale off ;proxy_cache_background_update on|off 默认off # 由nginx请求更新缓存,让客户端先用旧缓存
| 可选参数 | 含义 |
|---|---|
| error | 与上游建立连接、发送请求、读取响应头出错时 |
| timeout | 与上游建立连接、发送请求、读取响应头超时时 |
| invalid_header | 无效头部时 |
| updating | 缓存过期,正在更新时 |
| http_状态码 |
缓存清除操作
第三方nginx缓存清除模块。使用可以加—add-module ngx_cache_purge文件路径编译新版
location ~ /cache_purge(/.*) {proxy_cache_purge cache_zone $host$1;}# cache_zone 对应缓存 keys_zone 这个的名称# $host$1; 对应缓存key
