Re: как правильно проксировать вебсокеты ?

Илья Шипицин chipitsine на gmail.com
Вт Ноя 28 14:08:53 UTC 2017


(сорян за топпостинг)

давно была мысль.
настройки кипэлайвов, насколько, я понимаю, будут работать в любой
комбинации, даже в таких

1) в апстриме НЕ указан keepalive, в правилах проксирования указан
2) в апстриме указан keepalive, в правилах проксирования протокол 1.0

как писал Максим, это будет приводить к невидимому на первый взгляд
неоптимальному использованию ресурсов сервера.

можно как-то на уровне проверки синтаксиса ставить emerg для таких
разбалансировок ?

28 ноября 2017 г., 18:42 пользователь Maxim Dounin <mdounin на mdounin.ru>
написал:

> Hello!
>
> On Tue, Nov 28, 2017 at 12:46:53PM +0500, Илья Шипицин wrote:
>
> > Привет!
> >
> > в официальной документации https://nginx.ru/ru/docs/http/websocket.html
> >
> > есть пример
> >
> >     map $http_upgrade $connection_upgrade {
> >         default upgrade;
> >         ''      close;
> >     }
> >
> >
> > получается, что соединение будет закрываться каждый раз.
> >
> > не будет ли логичнее сделать
> >
> >     map $http_upgrade $connection_upgrade {
> >         default upgrade;
> >         ''      '';
> >     }
> >
> > ?
> >
> > или это какая-то задумка ? расскажите ?
>
> По умолчанию соединения к бэкенду используют HTTP/1.0 и
> закрываются каждый раз.  Если хочется, чтобы они не закрывались,
> нужно явно сказать nginx'у, чтобы использовал HTTP/1.1 и не
> отправлял на бэкенд "Connection: close", а также включить кэш
> keepalive-соединений в блоке upstream.  Подробнее об этом
> рассказано тут:
>
> http://nginx.org/ru/docs/http/ngx_http_upstream_module.html#keepalive
>
> Если хочется использовать keepalive к бэкендам одновременно с
> проксированием вебсокетов - то пример в статье про проксирование
> вебсокетов, естественно, не будет работать как есть, в нём надо
> "close" заменить на пустую строку - как и предложено выше.
>
> Однако если это сделать без включения кэша keepalive-соединений,
> то никаких положительных последствий не будет.  Наоборот, появится
> лишняя задержка перед закрытием соединения, и закрывать соединения
> будет nginx, а не бэкенд, что в свою очередь может привести к
> проблемам, так как time-wait сокеты вместо стороны бэкенда
> окажутся на стороне nginx'а.
>
> --
> Maxim Dounin
> http://mdounin.ru/
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20171128/99c9f7f7/attachment-0001.html>


Подробная информация о списке рассылки nginx-ru