Re: X-Accel-Buffering и fastcgi buffering - большие заголовки
Maxim Dounin
mdounin на mdounin.ru
Пт Дек 4 13:58:22 UTC 2015
Hello!
On Fri, Dec 04, 2015 at 05:28:36AM -0500, iotch wrote:
> При отправке бэкэндом, работающим через fast cgi заголовков, больше чем 16
> кб, получаю ошибку 502 и "upstream sent too big header while reading
> response header from upstream". Версия nginx 1.9.7.
Заголовок ответа должен целиком помещаться в fastcgi_buffer_size,
http://nginx.org/r/fastcgi_buffer_size/ru. Ошибка говорит о том, что
он не помещается.
> Пробовал добавлять первым заголовком "X-Accel-Buffering: no" - эффекта не
> дает. Пробовал устанавливать fastcgi_buffering: off; в нужном location, в
> server и в http - то же самое.
>
> Имеют ли значения параметра "fastcgi_buffering" и заголовка ответа бэкэнда
> "X-Accel-Buffering", при отправке бэкэндом слишком больших заголовков?
>
> Правильно ли я понимаю, что "X-Accel-Buffering" может быть применен только
> после полного чтения всех заголовков и если заголовки слишком большие для
> текущей конфигурации эффекта от него не будет?
Ни fastcgi_buffering, ни X-Accel-Buffering не обеспечивают
возможность чтения ответов с заголовком, размер которого превышает
fastcgi_buffer_size.
Оба они влияют на то, как читается и отправляется клиенту тело
ответа: по умолчанию nginx пытается минимизировать количество
совершаемой работы и дожидается, пока бекенд заполнит буфер
целиком, и только после этого отсылает его клиенту. В случае же,
если буферизация отключена, nginx сразу отсылает клиенту все
полученные от бекенда данные - это может быть важно, e.g., для
стриминга ответов.
> Дело в том, что приложение отправляет в заголовках информацию для отладки и
> хотелось бы контролировать буфферизацию из самого приложения, только когда
> большие заголовки действительно отсылаются. Возможно ли это?
Судя по вопросу, вам надо контролировать не буферизацию, а
размер fastcgi_buffer_size. Это можно делать только из конфига
nginx'а.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru