URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 90909
[ Назад ]

Исходное сообщение
"Подскажите механизм по раскидыванию запросов от разных клиентов"

Отправлено bomnop , 09-Фев-11 09:46 
Добрый день!

необходимо реализовать работу следующей схемы:

у нас в dmz есть сервер1 (ip 172.16.0.1) и сервер2 (ip 172.16.0.2).
снаружи есть внешние клиент1 (ip 1.1.1.1) и клиент2 (ip 2.2.2.2)

(на самом деле серверов ОЧЕНЬ много, клиентов тоже очень много)

по сути каждый клиент работает со своим сервером (т.е. клиент1 с сервером1, клиент2 с сервером2). каждому клиенту выдаётся наше (самописное) ПО для работы с своим сервером. затыка состоит в том, чтобы облегчить поддержку этого ПО при обновлении и инсталляции. Наш отдел разработки ПО хочет, чтобы настройки ВСЕХ клиентов были ОДИННАКОВЫМИ.
Т.е. в dmz поднимается какой-то прокси сервер, на который настраиваются все клиенты. И этот проксирующий сервер должен в зависимости от ip адреса клиента перенаправлять запрос на нужный сервер.

я посмотрел squid (на предмет cache_peer, но как я понял это не подходит)

есть ли какое то подходящее решение?

P.S. понятно, что лёгкое решение - это на каждом клиенте держать свои настройки для этого ПО, но тут вопрос организационный и он уже к сожалению решён и не обсуждаем.


Содержание

Сообщения в этом обсуждении
"Подскажите механизм по раскидыванию запросов от разных клиентов"
Отправлено Serge , 09-Фев-11 10:42 
revers proxy

"Подскажите механизм по раскидыванию запросов от разных клиентов"
Отправлено bomnop , 09-Фев-11 11:12 
> revers proxy

squid - тоже revers proxy и что?


"Подскажите механизм по раскидыванию запросов от разных клиентов"
Отправлено Serge , 09-Фев-11 12:14 
>> revers proxy
> squid - тоже revers proxy и что?

squid не единственный реверс прокси. Есть и другие, более заточенные на балансинг - varnish, nginx. Можно организовать авторизацию на реверс-прокси и редирекшен на основе login'a. Короче - почитали б про функционал _разных_ проксей, если с технологией уже определились.

Если балансинг нужен только на основе L3, то и LVS пойдет - он гораздо проще и производительнее. Да и кластеризуется на-раз.


"Подскажите механизм по раскидыванию запросов от разных клиентов"
Отправлено bomnop , 09-Фев-11 12:19 
>>> revers proxy
>> squid - тоже revers proxy и что?
> squid не единственный реверс прокси. Есть и другие, более заточенные на балансинг
> - varnish, nginx. Можно организовать авторизацию на реверс-прокси и редирекшен на
> основе login'a. Короче - почитали б про функционал _разных_ проксей, если
> с технологией уже определились.
> Если балансинг нужен только на основе L3, то и LVS пойдет -
> он гораздо проще и производительнее. Да и кластеризуется на-раз.

вы наверное не поняли. мне не нужен "балансинг". балансировка полагает как минимум 2 (ДВА) сервера на которые должны попадать запросы пользователя. У меня же связка клиент1 <-> сервер1, клиент2 <-> сервер2, и т.д... нет тут балансировки. по поводу пользователя - данное ПО не предполагает работу с авторизацией и аутентификацией. такое вот ПО :)

я так думаю что это становится проще сделать с помощью iptables.


"Подскажите механизм по раскидыванию запросов от разных клиентов"
Отправлено desenix , 09-Фев-11 14:16 
> я так думаю что это становится проще сделать с помощью iptables.

так и делайте с помощью iptables http://www.opennet.me/docs/RUS/iptables/

типа так

iptables -t nat -A PREROUTING -s 1.1.1.1 -p tcp  -j DNAT --to-destination 172.16.0.1
iptables -t nat -A PREROUTING -s 2.2.2.2 -p tcp  -j DNAT --to-destination 172.16.0.2

Естественно правила можно скриптом генерить.


"Подскажите механизм по раскидыванию запросов от разных клиентов"
Отправлено Andrey Mitrofanov , 09-Фев-11 14:49 
> у нас в dmz есть сервер1 (ip 172.16.0.1) и сервер2 (ip 172.16.0.2).
> снаружи есть внешние клиент1 (ip 1.1.1.1) и клиент2 (ip 2.2.2.2)

http://wiki.squid-cache.org/ConfigExamples/Reverse/MultipleW...

cache_peer ip.of.server1 parent 80 0 no-query originserver name=server1
cache_peer_access server1 deny foo

cache_peer ip.of.server2 parent 80 0 no-query originserver name=server2
cache_peer_access server2 allow foo
cache_peer_access server2 deny all


В nginx, наверное, было бы примерно --

geo  $backend  {
  1.1.1.1 172.16.0.1
  2.2.2.2 172.16.0.2;
}

+

proxy_pass         http://$backend/;

...
...

>каждому клиенту выдаётся наше (самописное) ПО для работы с

В постановке задачи, кстати, не заявлено, что протокол-таки http.