К сожалению, я не могу комментировать сообщение cnst - поэтому я собираюсь ответить здесь.
nginx_http_proxy
Модуль по умолчанию переговоров с верховьями в HTTP / 1.0. Это можно изменить с помощью директивы proxy_http_version 1.1
.
Это также может быть причиной того, что ваш сценарий возвращает ответ HTTP / 1.0, хотя чанкованное кодирование и код состояния 307
не существуют в этой версии.
Вы не должны использовать чанкованное кодирование с перенаправлением , так как это не имеет смысла.
Кроме того , кажется, что nginx не передает порции от вышестоящего к клиенту один за другим, но буферизует ответ вышестоящего . Поле Content-Length
заголовка игнорируется, поскольку оно противоречит определению. Мне пришлось посмотреть на исходный код модуля, потому что все это выглядит недокументированным.
Возможно, вы захотите попробовать nginx_tcp_proxy_module
проксировать содержимое в виде сырых данных TCP: Модуль на Github
ОБНОВЛЕНИЕ (10.04.14) модуль имеет поддержку для
заголовков , один из которых ( ) определяет , будет ли ответ должен быть буферизованными или нет.
nginx_http_proxy
X-Accel-*
X-Accel-Buffering: yes|no
Добавление этого заголовка ( X-Accel-Buffering: no
) к ответу бэкэнда заставит nginx напрямую передавать чанки клиенту.
Этот заголовок позволяет контролировать буферизацию для каждого запроса .
Модуль также имеет директиву конфигурации proxy_buffering
для включения или отключения буферизации ответов (не буферизация означает, что отправка чанков будет работать).
Прокси - буферизация (как заголовок и директива основе) документирован здесь .