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