Re: причина 'upstream sent too big header'?

Igor Sysoev igor на sysoev.ru
Чт Янв 27 12:20:06 MSK 2011


On Thu, Jan 27, 2011 at 11:47:32AM +0300, Alex L. Demidov wrote:

> У моего клиента работает nginx 0.8.53 под debian, php через fastcgi
> 
> location ~ \.php$ {
>     ssi on;
>     include fastcgi_params;
>     fastcgi_pass  127.0.0.1:9000;
>     fastcgi_index index.php;
>     fastcgi_param  SCRIPT_FILENAME  /var/www/axis$fastcgi_script_name;
> }
> 
> В процессе тестирования проявилась следующая проблема:
> 
> 2011/01/26 10:39:29 [error] 12938#0: *116 upstream sent too big header while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: www.example.com, request: "POST /prestashop/modules/hsbc/validation.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.example.com", referrer: "http://www.example.com/prestashop/modules/hsbc/validation.php"
> 
> Я порекомендовал клиенту добавить в секцию http { ... }
> 'fastcgi_buffers 8 16k;' и увеличивать первое число пока проблема не
> уйдет. Клиент докрутил до '128 16k', но проблема не решилась.
> 
> Заодно клиент прислал мне ссылку на утверждение г. Hongi Lai (автора
> Phusion Passenger) что данная проблема не решается увеличением
> буферов, цитирую: 'It's got nothing to do with buffer sizes. Nginx
> simply refuses to accept response headers that are larger than a
> certain limit for security reasons.'
> 
> http://groups.google.com/group/phusion-passenger/browse_thread/thread/5e6d0684793bc62d/b38b5374d957f3ef
> 
> Я поразглядывал вызов process_header в src/http/ngx_http_upstream.c
> и его окрестности и этих 'certain limit for security reasons' (кроме
> обычного переполнения буферов) которые приводят к сообщению
> 'upstream sent too big header' так и не увидел. Но смотрел я всего
> полчаса и хотелось бы услышать чье-то более информированное мнение.
> 
> Пока я посоветовал клиенту продолжить крутить буфера, но на этот раз
> менять второе число (16k) плюс одновременно добавить
> fastcgi_buffer_size с соответствующим размером (а надо ли?
> Документация говорит что этот буфер по умолчанию равен размеру
> буфера из fastcgi_buffers).

fastcgi_buffer_size - это буфер для чтения заголовка.
Потом он используется для тела на равне с fastcgi_buffers.
Его размер может отличаться от fastcgi_buffers:

fastcgi_buffer_size  256k;
fastcgi_buffers       8 16k;


-- 
Игорь Сысоев
http://sysoev.ru



Подробная информация о списке рассылки nginx-ru