重读Nginx缓存proxy_cache一些细节参数

Nginx缓存粗犷强大。动态数据静态化。即使服务挂了,只有服务器没有宕机,也能命中缓存。

nginx version: nginx/1.11.4

 location ~* ^/apicenter/(v3\.goods\.getList|) {
              proxy_cache cache_one;
              proxy_cache_valid 200 302 15d;
              proxy_cache_valid 301 1m;
              proxy_cache_valid any 0m;
	          proxy_cache_lock on;
              proxy_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
              #expires 10m;
              proxy_cache_methods POST;
              add_header  Nginx-Cache "$upstream_cache_status";
              add_header  X-Accept "$http_accept";
              add_header  cache-key "key=$host$uri";
              proxy_cache_key key=$host$uri;
              proxy_pass http://xxxx_dataservice;
              proxy_redirect off;

	          access_log  /data/logs/nginx/nginx.cache.log logstash_json2;
	          if ( $xce_logformat = '1' ){
		          log_by_lua_file conf.d/header_xce.lua;
		          access_log /data/logs/nginx/nginx.cache.log xce_json2;
	          }
              break;
 }

参数:proxy_cache_lock 

当proxy_cache_lock被启用时,当多个客户端请求一个缓存中不存在的文件(或称之为一个MISS),只有这些请求中的第一个被允许发送至服务器。其他请求在第一个请求得到满意结果之后在缓存中得到文件。如果不启用proxy_cache_lock,则所有在缓存中找不到文件的请求都会直接与服务器通信。

简单说也就是多个并发请求同时命中未缓存的key时,启用此参数时,nginx会只允许一个请求命中并生成缓存,其他请求等待缓存生成并读取返回数据。当第一个在请求在proxy_cache_lock_timeout 内,没有完成缓存,则nginx会让下一个请求进入,依次类推。

参数:proxy_cache_lock_age  (默认5s)

如果第一个进入的请求,没有在该参数设置的时间内完成,则会放行下一个请求,以生成缓存。

参数:proxy_cache_lock_timeout (默认5s)

给proxy_cache_lock参数设置一个超时时间,如果在该时间内,缓存没有生成,则所有的请求都会被转发到代理服务上。但相应的数据,不会被生成缓存。

 

参数:proxy_cache_valid

通过该参数,可以配置相应的http code类型的请求,生成的缓存的过期时间。Nginx不会缓存没有过期时间的类型。例如配置了0m,则代表不缓存。

我的版本设置proxy_cache_lock_age ,不成功。不懂为何,不过也是设置默认5s,所以无所谓去掉了。

更多参数说明,可以查看官方文档:

https://nginx.org/en/docs/http/ngx_http_proxy_module.html

你可能感兴趣的:(Nginx)