Re: Отключение буферизации для fastcgi
Maxim Dounin
mdounin на mdounin.ru
Сб Мар 13 05:12:55 MSK 2010
Hello!
On Sat, Mar 13, 2010 at 03:29:36AM +0300, Dmitry Koterov wrote:
> Есть вот такая конфигурация:
>
> location ~ /action/ {
> gzip off;
> fastcgi_buffer_size 4k;
> fastcgi_busy_buffers_size 4k;
> fastcgi_buffers 2 4k;
> fastcgi_pass 127.0.0.1:9000;
> fastcgi_param SCRIPT_FILENAME $document_root/index.php;
> include fastcgi_params;
> }
>
> Вопрос: можно ли ВООБЩЕ ВЫКЛЮЧИТЬ буферизацию, а НЕ сделать ее равной 4k +
> 2*4k? Дело в том, что в index.php лежит:
Нет, вообще отключить буферизацию для fastcgi нельзя.
>
> // в php.ini отключены output_buffering, output_compression, output_handler;
> implicit_flush включен
> while (ob_get_level()) ob_end_clean(); // на всякий пожарный
> for ($i = 0; $i < 5; $i++) {
> echo "Test! " . time() . "<br>\n";
> for ($n = 0; $n < 15000; $n++) echo "\n";
> flush();
> sleep(2);
> }
> exit;
>
> И экспериментальным путем было установлено, что $n = 15000 (плюс-минус) -
> это минимальный размер "вантуза", которым удается "протолкнуть" контент в
> браузер. Установка fastcgi_buffer_size и fastcgi_busy_buffers_size в меньшие
> значения не помогают (возможно, они просто вообще не могут корректно
> определяться внутри location, либо же всегда кратны 4K?).
>
> Т.е. задача - минимизировать размер "вантуза" любыми средствами. (Все-таки
> 15К - это многовато.)
> Подскажите, пожалуйста, как это правильно сделать.
nginx отдаёт данные клиенту (точнее - в цепочку исходящих
фильтров) после заполнения бекендом очередного буфера (либо
основного - fastcgi_buffer_size, либо одного из дополнительных -
fastcgi_buffers). В вашем случае это всегда 4k. Можно уменьшить,
но если в основной буфер не влезут все заголовки ответа - будет
502.
А 16k - скорее всего следует искать либо в php, либо в других
буферизирующих прослойках (e.g. ssl в nginx'е имеет буфер в 16k;
если тестируем по ssl - то результат объясним). Включённый debug
log вкупе с тестиком вида "напечатать 1k и поспать секунду,
повторить" быстро покажет что на самом деле происходит.
Maxim Dounin
Подробная информация о списке рассылки nginx-ru