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

Konstantin Tokarev annulen на yandex.ru
Вт Ноя 28 14:10:04 UTC 2017



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