缓存配置说明
先来了解一下proxy_cache缓存系统的基本配置,如下所示;
upstream test_servers {
server 127.0.0.1:81 max_fails=5 fail_timeout=10s weight=10;
server 127.0.0.1:82 max_fails=5 fail_timeout=10s weight=10;
server 127.0.0.1:83 max_fails=5 fail_timeout=10s weight=10;
}
# 设置缓存空间的名字及其存放路径和存放方式
proxy_cache_path /path/cache/nginxcache levels=1:2 keys_zone=cachedata:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen 80;
location / {
# 指定缓存的空间大小 (这个cachedata对应上边 keys_zone=cachedata)
proxy_cache cachedata;
# 指定缓存的HTTP状态及缓存时间
proxy_cache_valid 200 304 10s;
proxy_cache_valid 301 302 100s;
# 请求最少被访问两次才会被缓存
proxy_cache_min_uses 2;
# 指定缓存的key
proxy_cache_key $scheme$host$uri$is_args$args;
# 缓存的HTTP请求方法类型
proxy_cache_methods GET HEAD;
# 添加一个响应头,用来标识请求是否命中缓存
add_header N-Cache-Status $upstream_cache_status;
# 设置为on表示允许将请求的HEAD 方法给位GET方式进行缓存
proxy_cache_convert_head on;
sendfile on;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 当缓存丢失时,会去后端服务器获取数据,然后,将之返回给用户并进行缓存
proxy_pass http://test_servers;
}
}
下面对proxy_cache相关配置说明如下
(1).proxy_cache_path
- levels 代表缓存的目录结构,如levels=1:2表示目录有两级
- key_zone 用来设置缓存空间的名字和大小;如 keys_zone=cachedata:100m,表示缓存名是 cachedata ,最多可以存放100MB的缓存信息
- max_size 最大cache空间,如果不指定,会使用掉所有disk space,当达到配额后,会删除最少使用的cache文件
- inactive 未被访问文件在缓存中保留时间,本配置中如果60分钟未被访问则不论状态是否为expired,缓存控制程序会删掉文件。inactive默认是10分钟。需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件
- use_temp_path 如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝
(2).proxy_cache
启用proxy cache,并指定key_zone。另外,如果proxy_cache off表示关闭掉缓存。
(3).proxy_cache_valid
根据状态码来定义缓存的有效时间,支持多行配置,支持不同状态码配置不同的有效期
(4).proxy_cache_key
给缓存数据定义一个键,例如:
proxy_cache_key “$host$request_uri $cookie_user”;
默认情况下,该指令的值的字符串
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
(5).proxy_convert_head
如果设置为 on 表示允许将请求的HEAD 方法改为 GET 方法进行缓存;如果设置为 off ,则缓存的 key 需要加上 $request_method ,即:
$host$request_rui$request_method
(6).proxy_cache_methods
指定可以被缓存的请求方法,默认值为 GET HEAD
(7).proxy_cache_methods
设置 key 在被缓存前被访问的次数,默认是1次