Отключение буферизации для fastcgi

Dmitry Koterov dmitry на koterov.ru
Сб Мар 13 03:29:36 MSK 2010


Добрый день.

Есть вот такая конфигурация:

    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 лежит:

// в 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К - это многовато.)
Подскажите, пожалуйста, как это правильно сделать.

P.S.
Такая схема используется для того, чтобы на медленных страницах, которые
грузятся дольше несколько секунд, моментально вывести <img
src="анимированный_gif_крутилка_загрузки">. Такие страницы иногда
встречаются из-за тормозов внешних сервисов, с этим ничего не поделать, к
сожалению.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20100313/c848791a/attachment.html>


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