Редирект с баланcингом

Maxim Dounin mdounin at mdounin.ru
Fri Sep 26 17:06:01 MSD 2008


Hello!

On Fri, Sep 26, 2008 at 06:34:17PM +0600, Rauan Maemirov wrote:

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

Или даже так:

if ($remote_addr ~ '^\d+\.\d+\.\d*[02468]\.') {
     rewrite ^ http://site1.example.com/one;
}
if ($remote_addr ~ '^\d+\.\d+\.\d*[13579]\.') {
     rewrite ^ http://site2.example.com/one;
}

Мапов при этом не нужно вообще.

Править регекспы по вкусу - приведённые выше делают балансировку 
по предпоследнему октету ip (т.е. два пользователя из одной /24 
сети попадут на один и тот же сервер).

Maxim Dounin


>>
>> Maxim Dounin
>>
>>
>>
>>
>>> 2008/9/25 Maxim Dounin <mdounin at mdounin.ru>
>>>
>>>  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
>>>>
>>>>
>>>>
>>





More information about the nginx-ru mailing list