ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Буферизация ответов от бэ кендов.


  • To: nginx-ru@xxxxxxxxx
  • Subject: Буферизация ответов от бэ кендов.
  • From: Evgeny Turnaev <turnaev.e@xxxxxxxxx>
  • Date: Thu, 8 Sep 2011 13:48:38 +0400
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; bh=4HUIKXHg4Fie7Bu3n0nu2NPjTsb7KEofX3PKNj9nnYI=; b=SQUGMMn/G3Rznlcjipv8I77KVgHR/UUNEdRfGF6SUoFBo9uFozvYFTbsOrvFPGrBQv 8G7Nv5BS/I0Mxo9DXPv8At6VhmalFvXxGWgkaOkFtnSnrdR8wCRisQmrJE2SL7Cffs63 Pnz0TMsbHrg20bRRehlNHcBrZwo8eQfAuU2Js=

Доброго времени суток.
  Вопросы:
  1) Нам очень нужен режим небуферизованный режим работы с бэкендами.
(fast_cgi, uwsgi)
  т.е. если бэкенд прислал 1Кб данных и пошел отдыхать то nginx должен
отдавать chunk (если клиент поддерживает HTTP/1.1)

  1.1) Будет ли принят патч http://forum.nginx.org/read.php?29,213388
?  (отключение буферизации на uwsgi директивой uwsg_buffering)

  На данный момент с этим делом все не так просто.

Далее по тексту - если не указанно то версия nginx 1.1.1
root@nostromo:/usr/local/nginx_test/sbin# ./nginx -V
nginx: nginx version: nginx/1.1.1
nginx: built by gcc 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)
nginx: TLS SNI support enabled
nginx: configure arguments: --with-debug --with-cc-opt='-D
NGX_UPSTREAM_KEEPALIVE_PATCHED' --prefix=/usr/local/nginx_test
--add-module=../ngx_http_upstream_keepalive-f3b50effc1d4/
--with-poll_module --with-http_ssl_module --with-http_realip_module
--with-http_addition_module --with-http_xslt_module
--with-http_image_filter_module --with-http_geoip_module
--with-http_sub_module --with-http_dav_module --with-http_flv_module
--with-http_gzip_static_module --with-http_random_index_module
--with-http_secure_link_module --with-http_degradation_module
--with-http_stub_status_module --with-http_perl_module
--without-http_memcached_module

Суть проблемы более детально:
Бэкенды на данный момент на fast_cgi (в дальнейшем планируется переход на uwsgi)
Казалось бы  для того чтобы nginx отдавал chunkи  по мере поступления
данных от бэкенда
логично было бы указать proxy_buffering off; в конфиге
но это не работает :( почему то nginx продолжает ожидать всего ответа
от бекенда.

Хочу заметить что нам НЕ нужен keepalive (бэкенд закрывает сокет после
ответа. по крайней мере uwsgi делает это точно.)

Более инересные вещи:
С keepalive патчем из этой ссылки
http://mailman.nginx.org/pipermail/nginx-devel/2011-July/001057.html
внезапно стал работать proxy_buffering off; на fast_cgi бэкенде. (с
отключенным gzip) (конфиг в аттаче см. ниже)
Что инетересно - стало работать даже без указания keepalive N; или
каких либо proxy_http_version.
(для того чтобы отключить буферизацию на uwsgi пришлось поставить патч
http://forum.nginx.org/read.php?29,213388 )
Однако если включить gzip фильтр - он (gzip фильтр) начинал
буферизовывать ответ.
Чтобы это исправить - пришлось сделать пару правок в
ngx_http_gzip_filter_module.c
(в аттаче архив с патчем, тестовыми клиентами и бэкендами и nginx на
котором я тестил)
вот ссылка на архив с патчем:
https://docs.google.com/leaf?id=0B3-C0q92L4ZIYmY2MmY2MGEtNWFkZS00YzU1LWE5NDUtMmE0NWNlNDBiMzIz&hl=ru

(1.1.1 ./configure --with-debug --with-cc-opt="-D
NGX_UPSTREAM_KEEPALIVE_PATCHED" --prefix=/usr/local/nginx_test
--add-module=../ngx_http_upstream_keepalive-f3b50effc1d4/
--with-poll_module --with-http_ssl_module --with-http_realip_module
--with-http_addition_module --with-http_xslt_module
--with-http_image_filter_module  --with-http_geoip_module
--with-http_sub_module --with-http_dav_module  --with-http_flv_module
--with-http_gzip_static_module --with-http_random_index_module
--with-http_secure_link_module --with-http_degradation_module
--with-http_stub_status_module --with-http_perl_module
--without-http_memcached_module )

патч добавил директиву z_sync on | off
с включенным z_sync - zlib сразу выбрасывает ответ и nginx тоже.

(в сорсе вроде есть postpone_gzipping который при значении 0 вроде как
должен отключать буферизацию. ctx->buffering по используется он только
в ngx_http_gzip_filter_buffer и не используется для ctx->flush хотя
можно было бы при 0 выставлять ctx->flush = 1 и не лепить отдельную
директиву z_sync)

Еще более интересные вещи:
на nginx-1.1.2 с вот этим патчем (keepalive full 5 ):
http://forum.nginx.org/read.php?21,214936,214937#msg-214937
nginx буферизует ответ от бэкенда с proxy_buffering off;  :(
Причем включение/выключение gzip не влияет.

( ./configure --with-debug --prefix=/usr/local/nginx_test1.2
--with-poll_module --with-http_ssl_module --with-http_realip_module
--with-http_addition_module --with-http_xslt_module
--with-http_image_filter_module  --with-http_geoip_module
--with-http_sub_module --with-http_dav_module  --with-http_flv_module
--with-http_gzip_static_module --with-http_random_index_module
--with-http_secure_link_module --with-http_degradation_module
--with-http_stub_status_module --with-http_perl_module
--without-http_memcached_module ) тот же конфиг что в архиве.

Резюме:
- Нам бы очень хотелось увидеть работающую proxy_buffering off; безо
всяких патчей и keepalive (на fast_cgi и uwsgi)
- Хотелось бы иметь возможность отключать буферизацию в gzip фильтре
совсем (Z_SYNC_FLUSH) из конфига nginx

-- 
--------------------------------------------
Турнаев Евгений Викторович
+7 906 875 09 43
--------------------------------------------

Attachment: nginx_gzip_patch.tar.bz2
Description: BZip2 compressed data

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.