1

Nginx--proxy cache使用


项目中采用Nginx作为代理服务器,静态接口的数据都缓存在nginx中,这样可以有效减小源服务器的负载。在这里整理一下Nginx proxy cache的配置。

nginx proxy cache 原理

image

  1. 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;
  1. 在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已经启用。


丶木叶
112 声望5 粉丝

我始终相信比你优秀的人过着比你更努力的生活。