Отключение буферизации для 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