Niestety nie mogę komentować postu cnst - więc odpowiem tutaj.
nginx_http_proxyModuł domyślnie rozmów z Upstream w HTTP / 1.0. Można to zmienić za pomocą dyrektywy proxy_http_version 1.1.
Może to być również przyczyną, dla której skrypt zwraca odpowiedź HTTP / 1.0, chociaż 307w tej wersji nie istnieje kodowanie dzielone i kod statusu .
Nie powinieneś także używać kodowania fragmentarycznego z przekierowaniem , ponieważ tak naprawdę nie ma to sensu.
Dodatkowo wygląda na to, że nginx nie przekazuje fragmentów od klienta do klienta jeden po drugim, ale buforuje odpowiedź użytkownika . Pole Content-Lengthnagłówka jest ignorowane, ponieważ jest niezgodne z definicją. Musiałem spojrzeć na kod źródłowy modułu, ponieważ wszystko to wydaje się nieudokumentowane.
Możesz wypróbować nginx_tcp_proxy_moduleproxy do fragmentacji jako surowych danych TCP: Moduł w Github
UPDATE (10/04/14) moduł obsługuje
nagłówków , z których jeden ( ) określa, czy odpowiedź powinna być buforowane lub nie.
nginx_http_proxyX-Accel-* X-Accel-Buffering: yes|no
Dodanie tego nagłówka ( X-Accel-Buffering: no) do odpowiedzi backendu spowoduje, że nginx bezpośrednio przekaże porcje do klienta.
Ten nagłówek pozwala kontrolować buforowanie na podstawie żądania .
Moduł ma również dyrektywę konfiguracji, proxy_buffering która włącza lub wyłącza buforowanie odpowiedzi (brak buforowania oznacza, że wysyłanie porcji będzie działać).
Buforowanie proxy (zarówno na podstawie nagłówka, jak i dyrektywy) jest tutaj udokumentowane .