Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: upstream sent too big header
Hello!
On Fri, Nov 21, 2008 at 10:45:27PM +0300, Борис Долгов wrote:
> Тогда предлагаю патч
>
> 21 ноября 2008 г. 22:02 пользователь Maxim Dounin <mdounin@xxxxxxxxxx>написал:
>
> > 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
|