nginx cache

Maxim Dounin mdounin at mdounin.ru
Wed Apr 29 11:18:18 UTC 2015


Hello!

On Wed, Apr 29, 2015 at 12:35:22PM +0300, Vasil Mikhalenya wrote:

> Коллеги, подскажите что происходит

[...]

> proxy_cache_path /var/lib/nginx/cache keys_zone=mycdn:20m inactive=1d
> use_temp_path=off;
> 
> 
> server {
>     listen 80;
>     server_name mycdn.com 127.0.0.1;
> 
>     proxy_cache mycdn;
> 
>     location / {
>         proxy_pass http://origin;
>         proxy_set_header Host       $proxy_host;
>         proxy_cache_lock on;
>         proxy_cache_lock_age 2h;
>         proxy_cache_lock_timeout 2h;
>         proxy_cache_key "$uri";
>         add_header Cache $upstream_cache_status;
>     }
> }
> 
> 
> [root at node ~]# ll /var/lib/nginx/cache/ | wc -l
> 
> 228
> т.е. у nginx в cache есть около 2 сотен популярных файлов  (118G
> /var/lib/nginx/cache/),
> он успешно отдает несколько дней, ничего нового из origin не качает, в
> какой то момент случается это

Видимо, это происходит в тот момент, когда ответы в кеше 
expire'ятся.  Имеет смысл включить "proxy_cache_use_stale 
updating", см. тут:

http://nginx.org/r/proxy_cache_use_stale/ru

Кроме того, если речь идёт о больших статических файлах - имеет 
смысл также использовать proxy_cache_revalidate, см. тут:

http://nginx.org/r/proxy_cache_revalidate/ru

> [root at node ~]# ll /var/lib/nginx/cache/temp/ | wc -l
> 
> 5714
> 
> Т.е. число файлов в temp растет очень быстро, хотя обычно = 0.
> 
> restart nginx и очистка tempdir не помогает (файлы в tempdir появляются
> снова), помогает только полная очистка cache

Потому что proxy_cache_lock используется только при добавлении 
элементов в кеш.  Если хочется избежать одновременных обращений на 
бекенд нескольких клиентов при обновлении, то надо включать 
"proxy_cache_use_stale updating", см.  выше.

-- 
Maxim Dounin
http://nginx.org/



Подробная информация о списке рассылки nginx-ru