nginx限制总缓存大小

时间:2013-04-09 17:34:12

标签: nginx

我正在使用nginx使用

将请求缓存到我的uwsgi后端
uwsgi_cache_path /var/cache/nginx/uwsgi keys_zone=cache:15M max_size=5G;

我的后端设置了一个非常长的过期标题(1年+)。但是,当我的系统运行时,我看到缓存在15M时达到顶峰。它达到了这个水平,然后降低到10M。

这导致我的后端有很多不必要的调用。当我更改keys_zone大小时,它似乎控制整个缓存的大小。它似乎忽略了max_size,而是替换了keys_zone大小。 (*)

任何人都可以解释这种行为吗?这个版本中是否存在已知错误?我错过了这一点吗?我不想将5G分配给缓存管理器..

# nginx -V
nginx version: nginx/1.2.0
built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 
TLS SNI support enabled
configure arguments: --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid --user=www-data --group=www-data --with-http_ssl_module --with-http_stub_status_module

(*)更新:我想这是我在混乱中寻找模式的过度想象力。

1 个答案:

答案 0 :(得分:5)

expire标头(and some other headers)受到nginx的尊重,以确定响应是否可缓存,但它不用于确定缓存它的时间。

默认情况下,10分钟后将删除非活动缓存。你可以增加这个数字,看看它是否有所作为?

  

proxy_cache_path path [levels = levels] keys_zone = name:size   [inactive = time] [max_size = size] [loader_files = number]   [loader_sleep = time] [loader_threshold = time];

     

在指定的时间内未访问的缓存数据   无效参数将从缓存中删除,无论它们是什么   新鲜。默认情况下,非活动设置为10分钟。

参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path