Сброс выходного буфера в настройке Apache / Nginx

Я бы хотел, чтобы содержимое страницы для веб-страницы, которую я разрабатываю, появляется на экране по мере ее загрузки. В моей среде тестирования / разработки это работает, как ожидается, с помощью команды PHP flush ().

Однако моя производственная установка (WPEngine) использует прокси-сервер Nginx перед Apache и flush () больше не работает (и не выполняет никаких других команд буферизации вывода). Я смог получить желаемое поведение, намеренно заполняя буфер, когда хочу сбросить его, отправив пробел 4k.

Тем не менее, это похоже на взлом, и страница, о которой идет речь, должна быть сброшена 100 раз или более, поэтому это добавляет значительную сумму к общим загруженным данным.

Есть ли способ подать сигнал Nginx, чтобы очистить буфер (или вообще не буфер), отправив управляющие символы и / или настроив заголовки HTTP, чтобы я мог избежать отправки ненужных пробелов?

Поскольку WPEngine – это управляемая среда хостинга, я не могу вносить никаких изменений в настройку сервера. Так, например, отключить буферизацию Nginx, добавив директиву в конфигурацию сервера nginx, не является вариантом.

То, как я сейчас это делаю, выглядит следующим образом:

<?php //turn off server content compression for this page header('Content-Encoding: none;'); //turn off PHP output buffering ob_end_flush(); //make padding to fill buffer $buffer = str_repeat(" ", 4096*8); $start = time(); do { printf( 'Time: %s secs<br>', time() - $start ); echo $buffer; sleep(1); } while( (time() - $start) < 10 ); ?> 

Вы должны отключить буферизацию в nginx:

 proxy_buffering off; 

Ссылка: http://nginx.org/r/proxy_buffering

Хотя уже есть принятый ответ, который является несколько правильным, стоит отметить, что если вы используете php- fastcgi_buffering , fastcgi_buffering также является проблемой.

Документация неясна, но излучение X-Accel-Buffering: no заголовок в вашем ответе не отключит fastcgi_buffering , только в> = nginx 1.5.6 . Кажется, что заголовок влияет как на proxy_buffering и на fastcgi_buffering , что неясно из документов .

Поскольку большинство дистрибутивов по-прежнему работают в nginx 1.4 series, и многие люди используют php-fpm, это потенциальная точка отключения (то есть она повесила меня на час).

Это может быть проблема nginx, использовать ее в буфере

 fastcgi_keep_conn on; 

Если вам нужна помощь, зная, куда именно вам нужно поместить это, то передайте свой конфигурационный файл nginx.