<div dir="ltr"><div style>Привет,</div><div style><br></div>Покажите заголовки запросов.<div><br><div style>Спасибо.</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">22 августа 2013 г., 16:06 пользователь aler <span dir="ltr"><<a href="mailto:nginx-forum@nginx.us" target="_blank">nginx-forum@nginx.us</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Всем, привет !<br>
Я уже поднимал данную проблему, но решил создать еще один топик с полной<br>
информацией.<br>
Итак, NGINX:<br>
<br>
nginx version: nginx/1.4.1<br>
built by gcc 4.1.2 20080704 (Red Hat 4.1.2-54)<br>
TLS SNI support disabled<br>
configure arguments: --user=nginx --group=nginx --prefix=/usr/share/nginx<br>
--sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf<br>
--error-log-path=/var/log/nginx/error.log<br>
--http-log-path=/var/log/nginx/access.log<br>
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body<br>
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy<br>
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi<br>
--pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx<br>
--with-http_secure_link_module --with-http_random_index_module<br>
--with-http_ssl_module --with-http_realip_module --with-http_addition_module<br>
--with-http_sub_module --with-http_dav_module --with-http_flv_module<br>
--with-http_gzip_static_module --with-http_stub_status_module<br>
--with-http_perl_module --with-http_xslt_module --with-debug --with-mail<br>
--with-mail_ssl_module --with-cc-opt='-O2 -g -m64 -mtune=generic'<br>
--with-ipv6<br>
--add-module=/usr/src/redhat/BUILD/nginx-1.4.1/nginx-upstream-fair<br>
--add-module=/usr/src/redhat/BUILD/nginx-1.4.1/nginx-upload-progress-module<br>
--add-module=/usr/src/redhat/BUILD/nginx-1.4.1/mod_zip<br>
--add-module=/usr/src/redhat/BUILD/nginx-1.4.1/nginx_mod_h264_streaming<br>
--add-module=/usr/src/redhat/BUILD/nginx-1.4.1/nginx-push-stream-module<br>
--add-module=/usr/src/redhat/BUILD/nginx-1.4.1/nginx_upstream_hash<br>
--add-module=/usr/src/redhat/BUILD/nginx-1.4.1/nginx-memcached-hash-pass<br>
--add-module=/usr/src/redhat/BUILD/nginx-1.4.1/echo-nginx-module<br>
--add-module=/usr/src/redhat/BUILD/nginx-1.4.1/ngx_http_gunzip_filter_module<br>
--add-module=/usr/src/redhat/BUILD/nginx-1.4.1/headers-more-nginx-module<br>
<br>
<br>
Есть back-end (JBOSS) и front-end (NGINX). На nginx настроено проксирование<br>
и включен keep-alive:<br>
<br>
http{<br>
...<br>
keepalive_timeout 45 45;<br>
keepalive_requests 1000;<br>
...<br>
}<br>
<br>
...<br>
<br>
server{<br>
...<br>
location /our-portal/ {<br>
proxy_pass <a href="http://127.0.0.1:8080" target="_blank">http://127.0.0.1:8080</a>;<br>
break;<br>
error_page 404 = @404;<br>
error_page 502 = @502;<br>
error_page 504 = @504;<br>
}<br>
...<br>
}<br>
<br>
если дергать нужный мне ресурс напрямую с back-end(JBOSS), то приходит<br>
следующий заголовок:<br>
<br>
Заголовок ответа:<br>
---------------------------------------------------------------<br>
Accept-Ranges       bytes<br>
Cache-Control       no-cache<br>
Content-Type        application/x-javascript; charset=UTF-8<br>
Date                Thu, 22 Aug 2013 11:46:04 GMT, Thu, 22 Aug 2013 11:46:04<br>
GMT<br>
Server              Restlet-Framework/2.0.14<br>
Transfer-Encoding   chunked<br>
Vary                Accept-Charset, Accept-Encoding, Accept-Language, Accept<br>
---------------------------------------------------------------<br>
<br>
Если делать запрос через front-end, то NGINX возвращает следующее:<br>
---------------------------------------------------------------<br>
Cache-Control        no-cache<br>
Connection           close<br>
Content-Encoding     gzip<br>
Content-Type         application/x-javascript; charset=UTF-8<br>
Date                 Thu, 22 Aug 2013 11:45:25 GMT<br>
Server               nginx<br>
Vary                 Accept-Encoding, Accept-Charset, Accept-Encoding,<br>
Accept-Language, Accept<br>
---------------------------------------------------------------<br>
<br>
Как видно из последнего запроса, nginx шлет ответ клиенту и не позволяет<br>
переиспользовать имеющийся коннекшн, присылая "Connection : close". Это<br>
касается всех ресурсов, которые запрашивает nginx c back-end.<br>
Если ресурс на nginx не пробрасывается на прокси или данные берутся из<br>
memcached (подключен соответсвующий модуль), то nginx исправно присылает<br>
"Connection : keep-alive".<br>
Как побороть данную проблему ? Как заставить nginx возвращать keep-alive<br>
соединения клиенту при получении данных с прокси ?<br>
<br>
Есть предположение, что он это делает, поскольку данные - динамические, и<br>
nginx не знает размер данных, отдаваемых клиенту, и для страховки запрещает<br>
переиспользовать соединение, по которому передаются данные неизвестного<br>
размера. Были мысли, чтобы nginx буферизировал данные с прокси, а потом<br>
проставлял размер ответа и возвращал keep-alive (не врядли это возможно). С<br>
другой стороны согласно документации Http-1.1 позволяет использовать<br>
keep-alive совместно с chunked.<br>
<br>
Есть какие-то мысли относительно данной проблемы ?<br>
Заранее благодарю всех, кто откликнется!<br>
<br>
Posted at Nginx Forum: <a href="http://forum.nginx.org/read.php?21,242120,242120#msg-242120" target="_blank">http://forum.nginx.org/read.php?21,242120,242120#msg-242120</a><br>
<br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Viacheslav Biriukov<br>
BR<br><div><a href="http://biriukov.me" target="_blank">http://biriukov.me</a></div></div>
</div>