ПРОЕКТЫ 


  АРХИВ 


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: Редирект с баланcингом



Вот теперь до меня дошло. Спасибо.

2008/9/26 Maxim Dounin <mdounin@xxxxxxxxxx>
Hello!


On Fri, Sep 26, 2008 at 01:11:31PM +0600, Rauan Maemirov wrote:

Если хочется получить именно редирект, и при этом с хешированием по
ip-адресам - напишите простое хеширование на >if'ах/map'ах, либо на
встроенном perl'е.

Пытаюсь сделать на map'ах. Но не пойму как написать  "простое хеширование на
if'ах/map'ах". Так как у меня нужно редиректить только один location, map
выдает ошибки...

  map $uri $new {
      /one   http://site1.example.com/one/;
      /one   http://site2.example.com/one/;
  }

А в чём смысл такой конструкции?  Что, есть надежда что засовывание в ассоциативный массив двух значений с одним и тем же ключём приведёт к тому что они волшебным образом начнут возвращаться по очереди в зависимости от ip-адреса клиента и погоды на марсе?
Мапы надо делать не на $uri, а на [части] ip. И потом использовать результат в rewrite.  Как-то так:

map $net $site {
   0  1;
   1  2;
   2  1;
   3  2;
   ...
}

location /one {
   if ($remote_addr ~ '^\d+\.\d+\.(\d+)') {
       set $net $1;
       rewrite ^ http://site$site.example.com/one;
   }
}

Maxim Dounin




2008/9/25 Maxim Dounin <mdounin@xxxxxxxxxx>

Hello!

On Thu, Sep 25, 2008 at 06:05:32PM +0600, Rauan Maemirov wrote:

 Здравствуйте.

Помогите, пожалуйста, организовать редирект.

В сервере example.com есть апстрим.

upstream site {
     ip_hash;

     server   site1.example.com;
     server   site2.example.com;
 }

и есть location

     location ^~ /one {
         proxy_pass     http://site/one;
         proxy_redirect default;
     }

Т.е. при обращении на example.com/one он должен редиректиться на
site1.example.com/one или site2.example.com/one. rewrite не подходит, так
как мне нужен редирект с ip_hash.


Редирект - это возврат http-ответа 302 Found (либо 301, 307), его делает
именно rewrite.  То, что делает proxy_pass - это проксирование.

Если хочется получить именно редирект, и при этом с хешированием по
ip-адресам - напишите простое хеширование на if'ах/map'ах, либо на
встроенном perl'е.

 Получаю "worker_connections is not enough while connecting to upstream"
или
"no live upstreams while connecting to upstream".

Насколько я понял, он зацикливается. Но никак не могу понять почему.


Судя по всему - site1.example.com и site2.example.com указывают на ту же
машину, и при этом запрос попадает на обработку к тому же proxy_pass'у и так
далее - пока у nginx'а не кончаться соединения.

Maxim Dounin






 




Copyright © Lexa Software, 1996-2009.