отключить буферизацию запросов в nginx
Похоже, что nginx буферизует запросы перед передачей их на сервер updstream, в то время как это нормально для большинства случаев, для меня это очень плохо:)
Мой случай выглядит так:
У меня есть nginx в качестве frontend сервера для прокси 3 различных серверов:
- apache с типичным php-приложением
- shaveet (сервер comet с открытым исходным кодом), построенный мной с помощью python и gevent
- сервер загрузки файлов, построенный заново с gevent, который проксирует загрузку в Rackspace cloudfiles в то время как принятие загрузки от клиента.
#3-это проблема, прямо сейчас у меня есть то, что nginx буферизует весь запрос, а затем отправляет его на сервер загрузки файлов, который, в свою очередь, отправляет его в cloudfiles вместо отправки каждого куска по мере его получения (те, кто делает загрузку быстрее, поскольку я могу толкать 6-7 МБ/с в cloudfiles).
Причина, по которой я использую nginx, состоит в том, чтобы иметь 3 разных домена с одним IP, если я не могу этого сделать, мне придется переместить сервер fileupload на другую машину.
4 ответа:
Согласно Gunicorn, они предлагают использовать nginx для буферизации клиентов и предотвращения атак slowloris. Так что эта буферизация, скорее всего, хорошая вещь. Тем не менее, я вижу вариант ниже по той ссылке, которую я предоставил, где говорится об удалении прокси-буфера, не ясно, находится ли это в nginx или нет, но похоже, что это так. Конечно, это при условии, что у вас есть Бегущий Гуникорн, которого у вас нет. Возможно, он все еще полезен для вас.
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;