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 mailing list
nginx-ru@nginx.org
http://nginx.org/mailman/listinfo/nginx-ru