<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">28 ноября 2017 г., 18:42 пользователь Maxim Dounin <span dir="ltr"><<a href="mailto:mdounin@mdounin.ru" target="_blank">mdounin@mdounin.ru</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello!<br>
<span class="gmail-"><br>
On Tue, Nov 28, 2017 at 12:46:53PM +0500, Илья Шипицин wrote:<br>
<br>
> Привет!<br>
><br>
> в официальной документации <a href="https://nginx.ru/ru/docs/http/websocket.html" rel="noreferrer" target="_blank">https://nginx.ru/ru/docs/http/<wbr>websocket.html</a><br>
><br>
> есть пример<br>
><br>
> map $http_upgrade $connection_upgrade {<br>
> default upgrade;<br>
> '' close;<br>
> }<br>
><br>
><br>
> получается, что соединение будет закрываться каждый раз.<br>
><br>
> не будет ли логичнее сделать<br>
><br>
> map $http_upgrade $connection_upgrade {<br>
> default upgrade;<br>
> '' '';<br>
> }<br>
><br>
> ?<br>
><br>
> или это какая-то задумка ? расскажите ?<br>
<br>
</span>По умолчанию соединения к бэкенду используют HTTP/1.0 и<br>
закрываются каждый раз. Если хочется, чтобы они не закрывались,<br>
нужно явно сказать nginx'у, чтобы использовал HTTP/1.1 и не<br>
отправлял на бэкенд "Connection: close", а также включить кэш<br>
keepalive-соединений в блоке upstream. Подробнее об этом<br>
рассказано тут:<br></blockquote><div><br></div><div>собственно, в примере про вебсокеты у вас:<br><pre>proxy_http_version 1.1;</pre></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
<a href="http://nginx.org/ru/docs/http/ngx_http_upstream_module.html#keepalive" rel="noreferrer" target="_blank">http://nginx.org/ru/docs/http/<wbr>ngx_http_upstream_module.html#<wbr>keepalive</a><br>
<br>
Если хочется использовать keepalive к бэкендам одновременно с<br>
проксированием вебсокетов - то пример в статье про проксирование<br>
вебсокетов, естественно, не будет работать как есть, в нём надо<br>
"close" заменить на пустую строку - как и предложено выше.<br>
<br>
Однако если это сделать без включения кэша keepalive-соединений,<br>
то никаких положительных последствий не будет. Наоборот, появится<br>
лишняя задержка перед закрытием соединения, и закрывать соединения<br>
будет nginx, а не бэкенд, что в свою очередь может привести к<br>
проблемам, так как time-wait сокеты вместо стороны бэкенда<br>
окажутся на стороне nginx'а.<br></blockquote><div><br></div><div>это понятно. как минимум, стоит это обговорить, в текущем виде пример неочевидный.<br></div><div>подозреваю, что его копипастят и драг-н-дропят по принципу "ну это же официальная документация, там фигню не посоветуют"<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<span class="gmail-HOEnZb"><font color="#888888"><br>
--<br>
Maxim Dounin<br>
<a href="http://mdounin.ru/" rel="noreferrer" target="_blank">http://mdounin.ru/</a><br>
______________________________<wbr>_________________<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" rel="noreferrer" target="_blank">http://mailman.nginx.org/<wbr>mailman/listinfo/nginx-ru</a></font></span></blockquote></div><br></div></div>