upstream sent too big header

Maxim Dounin mdounin at mdounin.ru
Sat Nov 22 02:57:28 MSK 2008


Hello!

On Fri, Nov 21, 2008 at 10:45:27PM +0300, Борис Долгов wrote:

> Тогда предлагаю патч
> 
> 21 ноября 2008 г. 22:02 пользователь Maxim Dounin <mdounin at mdounin.ru>написал:
> 
> > Hello!
> >
> > On Fri, Nov 21, 2008 at 09:24:26PM +0300, Борис Долгов wrote:
> >
> > > Похоже на баг:
> > > В документации к fastcgi_buffer_size - По умолчанию размер буфера равен
> > > размеру одного буфера в директиве
> > > fastcgi_buffers<
> > http://sysoev.ru/nginx/docs/http/ngx_http_fastcgi_module.html#fastcgi_buffers
> > >,
> > > однако его можно сделать меньше.
> > > И исправилось только после увеличения того самого fastcgi_buffer_size.
> >
> > Да, эта часть документации не соответствуюет действительности.

[...]

> -    ngx_conf_merge_size_value(conf->upstream.buffer_size,
> -                              prev->upstream.buffer_size,
> -                              (size_t) ngx_pagesize);
> -
> -
>      ngx_conf_merge_bufs_value(conf->upstream.bufs, prev->upstream.bufs,
>                                8, ngx_pagesize);
>  
> +    ngx_conf_merge_size_value(conf->upstream.buffer_size,
> +                              prev->upstream.buffer_size,
> +                              (size_t) conf->upstream.bufs.size);

Это задаст fastcgi_buffer_size равный размеру одного буфера 
fastcgi_buffers на первом merge - на всех последующих будет 
использовано унаследованное значение.  В результате в

    server {
        fastcgi_buffers 8 1024k;
    }

будет fastcgi_buffer_size == 1024k, а в

    server {
        location / {
            fastcgi_buffers 8 1024k;
        }
    }

будет fastcgi_buffer_size == ngx_pagesize.  Мягко говоря не 
интуитивно-понятное поведение.

Можно проверять, что в этом location'е установлены 
fastcgi_buffers, и в этом случае явно ставить buffer_size, но в 
таком случае в конфигурации

    server {
        fastcgi_buffer_size 2048k;
        location / {
            fastcgi_buffers 8 1024k;
        }
    }

будет проигнорировано унаследованное значение, что тоже мягко 
говоря странно.

Приемлемым решением было бы использовать размер одного буфера 
тогда и только тогда, когда fastcgi_buffer_size не задан ни в 
данном location'е, ни где-либо выше по иерархии.  Но такое просто 
невозможно сделать в текущей схеме merge'а.

Проще поправить документацию.

Maxim Dounin





More information about the nginx-ru mailing list