nginx.png

引言

平常我们在web服务中或多或少会用到cache,这次我们说的便是nginx cache。在代理层上的cache,有别于redis或memcache那种业务cache,nginx cache多用于静态资源的cache。
什么是nginx 在哪里配置cache,我们就省略了,我们直接讲重点。

详情

  • 开启Cache
    在nginx.conf中加入如下代码

    1
    proxy_cache_path  /data/nginx/cache  levels=1:2    keys_zone=STATIC:200m
        inactive=24h  max_size=1g;

    proxy_cache_path指的是存放cache的位置,如果没有此文件夹,重启nginx会报错
    keys_zone=STATIC:200m 表示这个zone名称为STATIC,分配的内存大小为200MB
    inactive=24h表示这个zone中的缓存文件如果在1天内都没有被访问,那么文件会被cache manager进程删除掉

    • max_size=1g 表示最大缓存大小为1G
  • 对于指定的域名加上cache

我们直接上实际加入的nginx配置

1
location ~* (/gateway/v1/phone/getAppOtherTimeNews*|/gateway/v1/phone/newscontent*)  {
               
                 client_body_buffer_size      500M;
	  
          	  proxy_cache STATIC;
            	proxy_cache_key $host$uri$is_args$args;
            	proxy_cache_valid 200 304 10m;
                add_header Access-Control-Allow-Origin *;
                proxy_read_timeout 300;
                proxy_connect_timeout 300;
                proxy_redirect     off;

                proxy_set_header   X-Forwarded-Proto $scheme;
                proxy_set_header   Host              $http_host;
                proxy_set_header   X-Real-IP         $remote_addr;
                rewrite /gateway/v1(.+)$ $1 break;

                proxy_pass http://localhost:7700;
        }


        location /gateway/v1  {
		client_body_buffer_size      500M;
		add_header Access-Control-Allow-Origin *;
                proxy_read_timeout 300;
                proxy_connect_timeout 300;
                proxy_redirect     off;

                proxy_set_header   X-Forwarded-Proto $scheme;
                proxy_set_header   Host              $http_host;
                proxy_set_header   X-Real-IP         $remote_addr;
                rewrite /gateway/v1(.+)$ $1 break;

                proxy_pass http://localhost:7700;
        }

上面我们只对于符合 /gateway/v1/phone/getAppOtherTimeNews*|/gateway/v1/phone/newscontent*这个正则表达式的路径进行缓存,所以我们也只需要关注这个location里面的即可,对于不符合此正则表达式的会自动路由到下面的访问中。
这里的关键参数就是下面这三个。

1
proxy_cache STATIC; 
proxy_cache_key $host$uri$is_args$args; 
proxy_cache_valid 200 304 10m;

proxy_cache 表示缓存的空间,与前面配置的keys_zone相符
proxy_cache_key 表示缓存的位置,有点类似于索引的意思
proxy_cache_valid 则表示缓存code为200的时间为10 分钟

这样,我们只要把配置加上,我们的缓存服务就OK了。