Re: proxy_store периодически сохраняет только часть ответа :(
Maxim Dounin
mdounin на mdounin.ru
Пн Дек 3 14:39:15 UTC 2018
Hello!
On Sun, Dec 02, 2018 at 11:18:05PM +0300, Виктор Вислобоков wrote:
> Схема такая: nginx(1) -> nginx(2) -> httpd
> На nginx(1) пытаюсь сделать кастомный статик кэш через proxy_store. Почти
> работает, но в произвольный момент времени сохраняет на диск не всю
> страницу с ответом, а только её часть! Это именно происходит периодически и
> не зависит ни от IP адреса ни от клиента (тот же Zabbix у меня то получает
> фрагмент и ругается на малый размер страницы, то в следующий повтор всё
> получает нормально - стоит чистка файлов, сохранённых proxy_store каждую
> минуту).
>
> Всю голову сломал - не могу понять что за ерунда!
> Судя по логам nginx(2) всегда отдаёт полный ответ.
Content-Length при этом в ответах бэкенда есть? А "только её
часть" - это именно часть, или просто пустой файл?
В случае, если именно пустой файл - проблема может быть связана с
тем, что в ответах нет Content-Length и сохраняются ответы на
HEAD-запросы.
Кроме того, опять же в случае отсутствия Content-Length,
стоит убедиться, что между nginx(1) и nginx(2), а равно между
nginx(2) и httpd - отсутствуют сетевые проблемы, и никто не
пытается преждевременно завершать процессы серверной стороны.
Либо же просто попробовать включить HTTP/1.1 с помощью директивы
proxy_http_version (http://nginx.org/r/proxy_http_version) и
посмотреть, поможет ли.
Проблема в том, что в HTTP/1.0, который nginx использует для
общения с бэкендами по умолчанию, в отсутствии Content-Length нет
какого-либо контроля целостности ответа кроме собственно
информации с уровня TCP, и если в какой-то момент бэкенд закроет
соединение (например, потому что процессу сказали завершиться, или
он решил, что случился таймаут) - то с точки зрения клиента ответ
будет полным.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru