отключить буферизацию запросов в nginx

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

мой случай такой:

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

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

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

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

4 ответов


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

EDIT: я провел некоторые исследования, и этот буфер отключен в nginx для исходящих данных длительного опроса. Nginx государства на их wiki сайт, входящие запросы должны быть буферизованы перед отправкой вверх по течению.

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


Как только эта функция [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


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

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

для отключения буферизации загрузки указать

proxy_request_buffering off;

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