nginx cache

Maxim Dounin mdounin на mdounin.ru
Сб Фев 13 02:16:25 UTC 2016


Hello!

On Fri, Feb 12, 2016 at 06:38:08PM +0300, Vasil Mikhalenya wrote:

> проблема все еще воспроизводится с таким конфигом,
> 
>     location / {
>         proxy_pass http://origin.example.com;
>         proxy_set_header Host       $proxy_host;
>         proxy_cache_lock on;
>         proxy_cache_lock_age 1d;
>         proxy_cache_lock_timeout 1d;
>         proxy_cache_revalidate on;
>         proxy_cache_use_stale updating;
>         proxy_cache_key "$uri";
>         add_header Cache $upstream_cache_status;
>         add_header X-ID  "{{ ansible_hostname }}";
>     }
> 
> за пару часов nginx просто съедает >1Tb локального диска, помогает только
> остановка nginx, очистка tmp кеша, запуск nginx, иногда делать это нужно
> несколько раз
> 
> в логах в этот момент
> 
> 2016/02/11 05:08:42 [crit] 9777#9777: *54423736 cache file
> "/var/lib/nginx/cache/c1/9c9de47f28ebc598e526af36d402e8f4" has too long
> header, client: 67.11.37.88,
> 2016/02/11 05:08:44 [crit] 9777#9777: *54423724 cache file
> "/var/lib/nginx/cache/c1/9c9de47f28ebc598e526af36d402e8f4" has too long
> header, client: 67.11.37.88,
> 2016/02/11 05:08:44 [crit] 9777#9777: *54423726 cache file
> "/var/lib/nginx/cache/c1/9c9de47f28ebc598e526af36d402e8f4" has too long
> header, client: 67.11.37.88,
> 2016/02/11 05:08:44 [crit] 9777#9777: *54423729 cache file
> "/var/lib/nginx/cache/c1/9c9de47f28ebc598e526af36d402e8f4" has too long
> header, client: 67.11.37.88,
> 2016/02/11 05:08:44 [crit] 9777#9777: *54423737 cache file
> "/var/lib/nginx/cache/c1/9c9de47f28ebc598e526af36d402e8f4" has too long
> header, client: 67.11.37.88,

Судя по логам, у вас в кеше откуда-то взялся мусор.  От этого 
перестаёт работать "proxy_cache_use_stale updating" (потому что 
отдавать - нечего), и proxy_cache_lock тоже не работает (потому 
что ресурс не новый, и соответственно обработка другая).  В 
результате имеем то, что имеем - множество запросов идут 
одновременно на бекенд.

Разбирайтесь, откуда у вас в кеше то, что там лежит.  Варианты на 
вскидку:

- кто-то положил туда ответ с большим заголовком через другой 
location, использовав большой proxy_buffer_size;

- файловая система приказала долго жить.

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



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