Welcome! Log In Create A New Profile

Advanced

Re: nginx-1.3.13

Maxim Dounin
February 19, 2013 11:26AM
Hello!

On Tue, Feb 19, 2013 at 08:02:06PM +0400, Михаил Монашёв wrote:

> Здравствуйте, Maxim.
>
> > *) Добавление: поддержка проксирования WebSocket-соединений.
> > Спасибо Apcera и CloudBees за спонсирование разработки.
>
> Посмотрел комит http://trac.nginx.org/nginx/changeset/5073/nginx , но
> не понял всю схему того, как оно работает. Обновляется соединение
> между nginx и бэкендом что ли?

Short version:

Устанавливает тоннель между клиентом и бекендом.

Long version, чтобы два раза не вставать:

Вообще протокол WebSocket работает с помощью механизма Upgrade,
присутствующего в HTTP/1.1, превращая соединение между клиентом и
сервером из HTTP/1.1 в WebSocket.

Есть, однако, нюанс: этот hop-by-hop механизм, он в нормальных
условиях не может проходить через proxy-сервера. Для forward
proxy в стандарте WebSocket есть затычка: клиентам предлагается
использовать CONNECT, чтобы пройти через proxy-сервер без потерь
(тот же CONNECT используется для того, чтобы через forward proxy
можно было ходить на https-ресурсы). Но с reverse proxy такой
подход не работает, т.к. клиент о proxy вообще не знает, и
требуется специальная обработка.

В вышеупомянтом коммите - добавлен специальный режим работы,
который позволяет nginx'у установить тунель между клиентом и
бекендом, если бекенд прислал ответ 101 Switching Protocols (и
если клиент действительно хотел upgrade'ить соединение).

Следует иметь ввиду, что по умолчанию nginx убирает из запроса на
бекенд hop-by-hop заголовки Upgrade и Connection, так что для
того, чтобы бекенд узнал, что клиент хотел upgrade'ить соединение,
эти заголовки надо явно пробросить. Пример конфигурации из
собственно коммит-лога:

location /chat/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

Как-то так.

--
Maxim Dounin
http://nginx.com/support.html

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

nginx-1.3.13

Maxim Dounin February 19, 2013 10:30AM

Re: nginx-1.3.13

Vipper February 19, 2013 10:59AM

Re: nginx-1.3.13

Михаил Монашёв February 19, 2013 11:04AM

Re: nginx-1.3.13

Maxim Dounin February 19, 2013 11:26AM

Re: nginx-1.3.13

kommandore February 21, 2013 06:11AM

Re: nginx-1.3.13

Валентин Бартенев February 21, 2013 08:42AM

Re: nginx-1.3.13

Ruslan Ermilov February 19, 2013 01:42PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 215
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