Nginx--proxy cache使用
项目中采用Nginx做为代理服务器,静态接口的数据都缓存在nginx中,这样能够有效减少源服务器的负载。在这里整理一下Nginx proxy cache的配置。nginx
nginx 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;
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健康。 cookie
配置完成后,重启nginx,至此,nginx cache已经启用。spa