Welcome! Log In Create A New Profile

Advanced

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

Konstantin Tokarev
November 28, 2017 09:12AM
28.11.2017, 17:04, "Илья Шипицин" <chipitsine@gmail.com>:
> 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.  Подробнее об этом
>> рассказано тут:
>
> собственно, в примере про вебсокеты у вас:
>
> proxy_http_version 1.1;
>
>> http://nginx.org/ru/docs/http/ngx_http_upstream_module.html#keepalive
>>
>> Если хочется использовать keepalive к бэкендам одновременно с
>> проксированием вебсокетов - то пример в статье про проксирование
>> вебсокетов, естественно, не будет работать как есть, в нём надо
>> "close" заменить на пустую строку - как и предложено выше.
>>
>> Однако если это сделать без включения кэша keepalive-соединений,
>> то никаких положительных последствий не будет.  Наоборот, появится
>> лишняя задержка перед закрытием соединения, и закрывать соединения
>> будет nginx, а не бэкенд, что в свою очередь может привести к
>> проблемам, так как time-wait сокеты вместо стороны бэкенда
>> окажутся на стороне nginx'а.
>
> это понятно. как минимум, стоит это обговорить, в текущем виде пример неочевидный.
> подозреваю, что его копипастят и драг-н-дропят по принципу "ну это же официальная документация, там фигню не посоветуют"

Я думаю, имелось в виду, что location с websocket не должен обрабатывать посторонние
HTTP-запросы, и для них соединения можно смело разрывать и не тратить место в кэше.

>
>> --
>> Maxim Dounin
>> http://mdounin.ru/
>> _______________________________________________
>> nginx-ru mailing list
>> nginx-ru@nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
> ,
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru


-- 
Regards,
Konstantin
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

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

Илья Шипицин November 28, 2017 02:48AM

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

Maxim Dounin November 28, 2017 08:44AM

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

Илья Шипицин November 28, 2017 09:06AM

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

Konstantin Tokarev November 28, 2017 09:12AM

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

Maxim Dounin November 28, 2017 09:26AM

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

Илья Шипицин November 28, 2017 09:10AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 143
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready