【问题标题】:nginx limiting the total cache sizenginx 限制总缓存大小
【发布时间】:2013-04-01 06:41:53
【问题描述】:

我正在使用 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

(*) 更新:我想这是我在混乱中寻找规律的过度活跃的想象。

【问题讨论】:

  • 默认情况下,您的非活动缓存将在 10 分钟后被删除。你能增加这个数字,看看它是否有影响吗? nginx.org/en/docs/http/…
  • 我想你明白了!把它写成答案,我会接受的。文档并不是那么清楚——我想是因为我使用了一个过期的标头,它会覆盖 inactive 参数。我应该自己尝试一下。
  • 对。 Expires 标头(和其他一些标头)由 nginx 来确定响应是否可缓存,但不用于确定缓存多长时间。

标签: nginx


【解决方案1】:

Expires 标头 (and some other headers) 由 nginx 使用,以确定响应是否可缓存,但不用于确定缓存多长时间。

默认情况下,您的非活动缓存将在 10 分钟后被删除。你能增加这个数字,看看它是否有影响吗?

proxy_cache_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

【讨论】:

  • 请您显示文档的哪一部分说没有使用 expires 标头来确定缓存多长时间?我读了 缓存尊重后端的“过期”,因为它在缓存时尊重标头值中的实际到期日期。也就是说,它会在指定的到期时间自动作废。
猜你喜欢
  • 2019-07-28
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2017-03-23
  • 2011-08-25
  • 1970-01-01
  • 2015-12-20
相关资源
最近更新 更多