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