ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: nginx-1.3.13



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@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.