nginx 缓存处理
核心指令
proxy_cache_path /data/nginx/cache/one levels=1:2 keys_zone=one:10m max_size=10g;
proxy_cache_key "$host$request_uri";
配置使用
proxy_cache one;
#设置状态码为200302过期时间为10分钟
proxy_cache_valid 20030210m;
#设置状态码404的过期时间为1分钟
proxy_cache_valid 4041m;
详细说明
主要指令
proxy_cache_path proxy_cache_key proxy_cache proxy_cache_valid。
proxy_cache_path
这个是设置缓存的目录,语法如下:
proxy_cache_path path [ levels = levels ] keys_zone = name : size [ inactive = time ][ max_size = size ][ loader_files = number ][ loader_sleep = time ][ loader_threshold = time ]
可放置的上下文:
http
参数解释:
[ levels = levels ]:
设置缓存目录层数,如levels=1:2,表示创建两层目录缓存,最多创建三层。第一层目录名取proxy_cache_key md5的最后一个字符,第二层目录名取倒数2-3字符,如:
proxy_cache_key md5为b7f54b2df7773722d382f4809d65029c,则:
levels=1:2为/data/Nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
levels=1:2:3为/data/nginx/cache/c/29/650/b7f54b2df7773722d382f4809d65029c
keys_zone = name : size:
定义缓存区域名称及大小,缓存名称用于proxy_cache指令设置缓存放置在哪,如proxy_cache one,则把缓存放在zone名称为one的缓存区,即proxy_cache_path指定的具体位置。
proxy_cache_key
这个指令是设置以什么参数md5得到缓存的文件名,默认为$scheme$proxy_host$request_uri,即以协议、主机名、请求uri(包含参数)作md5得出缓存的文件名。
proxy_cache_key与下面的清缓存功能(purge cache)有很大关系。可放置在上下文,http server location
proxy_cache
反向代理缓存设置指令,语法
proxy_cache zone | off,默认为off。
上下文:http server location。
可以放到指定location,这样匹配此location的url才被缓存。
proxy_cache_valid
设置指定状态码的缓存时间,语法
proxy_cache_valid [ code ...] time。
header 引起无法缓存解决
proxy_ignore_headers Set-CookieCache-Control;
proxy_hide_header Cache-Control;
proxy_hide_header Set-Cookie;