Re: баг в proxy_cache?

Maxim Dounin mdounin на mdounin.ru
Пн Июн 21 04:49:18 MSD 2010


Hello!

On Sun, Jun 20, 2010 at 02:28:29PM +0400, umask wrote:

> Добрый день,
> 
> ситуация такая. Есть nginx (1) на раздающих фронтендах, есть 
> nginx (2) на бэкэндах, к которым подключен сторадж.
> 
> Произошла ситуация, при которой (1) тянул файл размером 2.7ГБ с 
> (2) и (1) стянул только часть файла (чуть больше 70-и процентов) 
> - видимо (1) сделали restart или просто прибили.
> 
> В итоге получился файл в кеше:

[...]

> Выше строка - Content-Length: 2787475007.
> 
> А вот что в файловой системе:
> 
> cdn3-ti:/cache/cache0 # ls -la ./6/d3/4cd20316dabd922c81ab41a0988ffd36
> -rw------- 1 nginx nginx 2149680753 Jun 16 23:44 ./6/d3/4cd20316dabd922c81ab41a0988ffd36

[...]

> Прибитие файла в кеше проблему решило, но осадок неприятный - 
> куча пользователей не могла бы ещё неделю скачать данный файл.
> 
> При это всём nginx ничего не писал в лог ни на каких уровнях 
> (error_log был выставлен в debug).

Да, nginx сейчас не сверяет Content-Length с размером полученного 
ответа при сохранении в кеш.  Если соединение было закрыто 
бекендом - ответ попадёт в кеш в том виде, в каком пришёл.

Править где-то тут:

$ grep -n 'TODO: check length' src/http/ngx_http_upstream.c
2593:                /* TODO: check length & update cache */

Maxim Dounin



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