实例学习nginx的cache功能,供大家学习参考。
一.nginx的proxy_cache模块,据说比squid对多核的支持好很多。
二.配置
1.创建缓存目录,路径同一分区下
2.proxy_temp这个目录用于存储临时文件,默认在nginx下.需要看下是否www有权限写入,
如果不可写,无法在这个目录生成文件的话,会导致反向代理失败。也可以在
nginx的配置里设置proxy_temp_path指定存储临时文件的目录。
3.proxy_cache_path
levels设置目录层次
keys_zone设置缓存空间名字和共享内存大小(热点内容放在内存)
inactive在指定时间内没人访问则被删除在这里是1天
max_size最大缓存空间
所有active的key和元数据都保存在共享内存中-缓存区域(zone),
在keys_zone中定义该缓存区域的名字和大小.
三.nginx.conf 只写关键步骤
# 日志格式设置命中状态有HIT,EXPIRED
$upstream_cache_status
# 据说先写到temp再移动到cache
proxy_temp_path /data0/proxy_temp_path;
proxy_cache_path /data0/proxy_cache_path levels=1:2 keys_zone=cache_one:200m
inactive=10m max_size=500m;
upstream my_server_pool {
server 115.79.90.78:80;
}
server
{
listen 80;
server_name file.51yuncai.com;
location /
{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://my_server_pool;
}
# 设置缓存的文件类型,建议在后端设置缓存时间通过expires cache-control:max-age=[ses]
location ~ .*.(gif|jpg|png|bmp|swf|js|css)$
{
proxy_cache cache_one;
# 在cache端强制设置缓存时间
proxy_cache_valid 200 304 12h;
proxy_cache_valid 301 302 1m;
proxy_cache_valid any 1m;
proxy_cache_key $host$uri$is_args$args;
#####
add_header X-Cache $upstream_cache_status;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://my_server_pool;
}
location ~ /purge(/.*)
{
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
}
四.测试
访问 http://xxxx/logo.jpg
命中率:
五、命中状态说明
$upstream_cache_status
Appeared in 0.8.3. Possible values:
·MISS
·EXPIRED - expired, request was passed to backend 请求被传送到后端
·UPDATING - expired, stale response was used due to proxy/fastcgi_cache_use_stale
updating 正在更新,将使用旧的应答
·STALE - expired, stale response was used due to proxy/fastcgi_cache_use_stale
后端将得到过期的应答
·HIT