Re: proxy pass и указание номера порта

Maxim Dounin mdounin at mdounin.ru
Thu Jul 4 23:00:50 UTC 2013


Hello!

On Thu, Jul 04, 2013 at 03:10:13AM -0400, Kibets Alexander wrote:

> Необходимо сделать проксирование WEB-Socket соединения
> ВЕБ-часть открывает 2-ва WEB-Socket соединения на
> http://mysite.com/ws_cmd
> http://mysite.com/ws_data
> по 80-му порту
> 
> Они должны пробрасоватся на http://mysite.com:8000
> 
> http
> {
> ....
> 
>     server
>     {
>         listen ***.***.***.***:80;
>         
>        # Отдаем статику
>        location ^~ /gmap2/
>        {
>            root /home/www/sites/nodejs/data/;
>        }
> 
>        # WEB-Socket
> 
>        location /
>        {
>          # Извлекаем номер порта
>          rewrite    ^/ws_cmd(/*/)    /ws_cmd    break;
>          rewrite    ^/ws_data(/*/)   /ws_data   break;
> 
>          set  $port_num $1;
>          # set   $port_num 8000; так тоже не работает
>          # set   $port_num "8000"; так тоже не работает
> 
> так работает
> proxy_pass http://mysite.com:8000;
> а так !!! НЕ РАБОТАЕТ !!!
> #proxy_pass http://mysite.com:$port_num;
> 
>          proxy_http_version 1.1;
>          proxy_set_header Upgrade $http_upgrade;
>          proxy_set_header Connection "upgrade";
>          proxy_buffering             off;
>        }
> 
>     }
> 
> }
> 
> Я хочу в URL-е указывать номер порта на который должен пробрасоватся запрос
> (для распределения нагрузки).
> Помогите пожалуйста!

В чём заключается "не работает"?

Использование переменных в proxy_pass, помимо прочего, приводит к 
тому, что nginx начинает пытаться в resolve'ить имя mysite.com, и 
скорее всего в логах при вышеприведённом конфиге будет ругань про 
то, что нужно указать resolver.  Подробнее тут:

http://nginx.org/r/proxy_pass/ru
http://nginx.org/r/resolver/ru

А вообще - для распределения нагрузки лучше описать блок 
upstream, подробнее тут:

http://nginx.org/r/upstream/ru

-- 
Maxim Dounin
http://nginx.org/en/donation.html



Подробная информация о списке рассылки nginx-ru