Nginx--proxy cache使用
项目中采用Nginx作为代理服务器,静态接口的数据都缓存在nginx中,这样可以有效减小源服务器的负载。在这里整理一下Nginx proxy cache的配置。
nginx proxy cache 原理
- nginx.conf中配置proxy_cache:
proxy_temp_path /data/nginx_cache/proxy_cache/proxy_temp_dir;
proxy_cache_path /dev/shm/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=2d max_size=2g;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504 http_404;
- proxy_cache_path 缓存文件路径
- levels 设置缓存文件目录层次;levels=1:2 表示两级目录
- keys_zone 设置缓存名字和共享内存大小
- inactive 在指定时间内没人访问则被删除
- max_size 最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。
- proxy_temp_path : 使用temp_path存储,如果不使用,则配置在max_size后 use_temp_path=off;
- 在location中使用proxy cache:
location ^~ /static/ {
... ...
#定制proxy_cache的key,去除imei和sn等个性化参数。
set $custom_proxy_cache_key $host$uri$is_args$args;
include vhosts/customize_proxy_cache_key;
#忽略Expires、Set-Cookie头部
proxy_ignore_headers Expires Set-Cookie;
proxy_cache cache_one;
proxy_cache_valid 200 304 10m;
proxy_cache_key $custom_proxy_cache_key;
add_header X-Proxy-Cache $upstream_cache_status;
expires 10m;
... ...
}
这里有几个要注意的地方:
定制cache的key时,一定要注意:**谨慎使用值变化范围比较大的参数**。因为,这里使用参数的值作为cache的key的,当值变化返回很大的时候,一方面会导致缓存文件变得很大,另一方面缓存也就失去意义。
这里有一个知识点:
源服务器是通过Set-Cookie来告诉浏览器cookie的信息,包括cookie值,path,以及域。只要浏览器查看请求满足本地cookie的域,就把这个cookie携带入头部传给server。这里忽略掉这个头部才能使nginx proxy_cache 生效。
上边customize_proxy_cache_key具体配置如下:
set $custom_params $query_string;
#nginx缓存key去除imei
if ( $custom_params ~ ^(.*)(&imei=[^&]+)(.*)$) {
set $a $1;
set $c $3;
set $custom_params "${a}${c}";
}
set $custom_proxy_cache_key $host$uri$is_args$custom_params;
这里,就将参数中的imei和sn用户唯一值的参数去除,保证cache健康。
配置完成后,重启nginx,至此,nginx cache已经启用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。