28.11.2017, 17:04, "Илья Шипицин" <[email protected]>: > 28 ноября 2017 г., 18:42 пользователь Maxim Dounin <[email protected]> > написал: >> 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 >> [email protected] >> http://mailman.nginx.org/mailman/listinfo/nginx-ru > , > > _______________________________________________ > nginx-ru mailing list > [email protected] > http://mailman.nginx.org/mailman/listinfo/nginx-ru -- Regards, Konstantin _______________________________________________ nginx-ru mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
