отключить буферизацию запросов в nginx - PullRequest
7 голосов
/ 11 мая 2011

Кажется, что nginx буферизует запросы перед передачей их серверу updstream, хотя в большинстве случаев для меня это нормально, это очень плохо:)

Мой случай таков:

У меня nginx в качестве внешнего сервера для прокси 3 разных серверов:

  1. apache с типичным приложением php
  2. shaveet (кометный сервер с открытым исходным кодом), созданный мной на python и gevent
  3. сервер загрузки файлов, созданный заново с помощью Gevent, который прокси-сервер загружает файлы в rackspace cloudfiles при принятии загрузки от клиента.

# 3 проблема в том, что сейчас у меня есть то, что nginx буферизирует весь запрос, а затем отправляет его на сервер загрузки файлов, который, в свою очередь, отправляет его в облачные файлы вместо отправки каждого чанка по мере его получения (тех, кто делает загружайте быстрее, поскольку я могу выдавать 6-7 МБ / с в облачные файлы).

Причина, по которой я использую nginx, состоит в том, чтобы иметь 3 разных домена с одним IP, если я не могу этого сделать, мне придется перенести сервер загрузки файлов на другую машину.

Ответы [ 4 ]

8 голосов
/ 21 января 2015

Как только эта функция [1] будет реализована, Nginx сможет выступать в качестве обратного прокси-сервера без буферизации для загрузки (ошибка клиентских запросов).Он должен приземлиться в 1.7, что является текущей магистралью.

[1] http://trac.nginx.org/nginx/ticket/251

Обновление

Эта функция доступна с 1.7.11 с флагом

proxy_request_buffering on | off;

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_request_buffering

3 голосов
/ 05 сентября 2012

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

РЕДАКТИРОВАТЬ: Я провел некоторые исследования, и это отключение буфера в nginx для исходящих данных с длительным опросом.На своем wiki сайте Nginx заявляет, что входящие запросы должны быть буферизированы перед отправкой в ​​восходящем направлении.

"Обратите внимание, что при использовании прокси-модуля HTTP (или даже при использовании FastCGI),весь запрос клиента будет буферизован в nginx перед передачей на прокси-серверы бэкэнда. В результате индикаторы выполнения загрузки не будут работать правильно, если они будут работать, измеряя данные, полученные бэкэнд-серверами. "

1 голос
/ 23 апреля 2015

Теперь доступно в nginx начиная с версии nginx-1.7.11.

См. Документацию http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_request_buffering

Чтобы отключить буферизацию загрузки, укажите

proxy_request_buffering off;
0 голосов
/ 30 июня 2011

Я бы посмотрел в haproxy, чтобы удовлетворить эту потребность.

...