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

Исходное сообщение
"software layer7 (HTTP) load balancing по полям из http heade..."

Отправлено Sonny , 29-Июл-09 17:37 
Добрый день.

Есть такой вопрос - существуют ли доступные реализации software layer7 (HTTP) load balancing ???
Нужно сделать, чтобы в зависимости от значения полей из http header, таких как "host", "url" и т.п., трафик раскидывался бы по разным направлениям.

Пример - чтобы запрос GET HTTP на ru.www.net шел на один хост, а запрос на en.www.net - на другой ??? Т.е. в соответсвии с заданными правилами для разных URL.

Также вопрос по функциям подмены данных в http заголовках. Нужно чтобы решение могло менять значения отдельных полей в HTTP запросе, например URL с su.www.net на ru.www.net. Или могло бы вставлять во все пропускаемые HTTP запросы одинаковое значение в поле Host.

Насколько я знаю, всё это умеет делать железячное решение от Циско - CISCO ACE. Вроде как есть что-то подобное и от других производителей телеком. оборудования.

А видел ли кто-нибудь действующие программные решения, которые умеют это делать ?
Сразу обе нужные функции (маршрутизацию 7-го уровня \ подмену заголовков 7-го уровня) или по отдельности (т.е. 2 разных программы)
Желательно Open Source.

p.s. Как я понимаю, на популярных продуктах типа l7-filter такое не реализовать, т.к. подобные решения не поддерживают "TCP Delayed Binding" и соответсвенно могут маршрутизировать данные только по IP и порту, а не по типу протокола 7-го уровня и тем более не по данным в заголовке запроса протокола 7-го уровня.


Содержание

Сообщения в этом обсуждении
"software layer7 (HTTP) load balancing по полям из http heade..."
Отправлено BlackHawk , 29-Июл-09 17:50 
>[оверквотинг удален]
>
>Сразу обе нужные функции (маршрутизацию 7-го уровня \ подмену заголовков 7-го уровня)
>или по отдельности (т.е. 2 разных программы)
>Желательно Open Source.
>
>p.s. Как я понимаю, на популярных продуктах типа l7-filter такое не реализовать,
>т.к. подобные решения не поддерживают "TCP Delayed Binding" и соответсвенно могут
>маршрутизировать данные только по IP и порту, а не по типу
>протокола 7-го уровня и тем более не по данным в заголовке
>запроса протокола 7-го уровня.

squid + squidguard + firewall routing?


"software layer7 (HTTP) load balancing по полям из http heade..."
Отправлено сабакка , 29-Июл-09 19:02 
mod_proxy не годиться?
или ngnix

"software layer7 (HTTP) load balancing по полям из http heade..."
Отправлено Sonny , 29-Июл-09 20:34 
>squid + squidguard + firewall routing?

А можно подробнее ? какую функцию каком из вышеперечисленных продуктов предлагаете реализовывать ? Что вы имеете ввиду под firewall routing?

>mod_proxy не годиться?
>или ngnix

спасибо за совет. пока не знаю, надо смотреть, что они умеют...


"software layer7 (HTTP) load balancing по полям из http heade..."
Отправлено BlackHawk , 29-Июл-09 23:57 
>>squid + squidguard + firewall routing?
>
>А можно подробнее ? какую функцию каком из вышеперечисленных продуктов предлагаете реализовывать
>? Что вы имеете ввиду под firewall routing?

squid может по url выставлять source ip (есть есть два аплинка может чем-то помочь), а потом по source ip firewall redirect'ит в нужный интерфейс
squidguard позволяет переделывать/переписывать url по regexp
но вместо squidguard можно много чего использовать
вашу задачу сможет решить только прокся IMHO
>
>>mod_proxy не годиться?
>>или ngnix
>
>спасибо за совет. пока не знаю, надо смотреть, что они умеют...

по сути тоже что и я предложил. nginx умеет rewrite по regexp


"software layer7 (HTTP) load balancing по полям из http heade..."
Отправлено Sonny , 30-Июл-09 17:31 
>squidguard позволяет переделывать/переписывать url по regexp

А он может переделывать только URL или и прочие поля HTTP запроса (т.е. например Host, User-Agent и т.п.) ? Если и прочие, то поддерживаются ли "нестандартные" поля в HTTP запросе ?

>nginx умеет rewrite по regexp

Поддерживаются ли при этом "нестандартные" поля в HTTP запросе ?
Каким образом указать nginx, какое поле модифицировать ? Просто добавить к названию поля $http_ ,т.е. например для Accept-Language -> if ($http_Accept-Language = ru) {rewrite ...
Или немного не так ?


"software layer7 (HTTP) load balancing по полям из http heade..."
Отправлено BlackHawk , 30-Июл-09 19:56 
>>squidguard позволяет переделывать/переписывать url по regexp
>
>А он может переделывать только URL или и прочие поля HTTP запроса
>(т.е. например Host, User-Agent и т.п.) ? Если и прочие, то
>поддерживаются ли "нестандартные" поля в HTTP запросе ?

ему все равно... что припишешь то и будет
>
>>nginx умеет rewrite по regexp
>
>Поддерживаются ли при этом "нестандартные" поля в HTTP запросе ?
>Каким образом указать nginx, какое поле модифицировать ? Просто добавить к названию поля $http_ ,т.е. например для Accept-Language -> if ($http_Accept-Language = ru) {rewrite ...
>Или немного не так ?

этому так же... изначально nginx позиционировался как load-balancer :)


"software layer7 (HTTP) load balancing по полям из http heade..."
Отправлено cyclope , 30-Июл-09 11:43 
попробуйте просмотреть модуль string для iptables
вот пример борьбы с одним типом риквеста http://spamcleaner.org/en/misc/w00tw00t.html
единственное, это переписывание l7 полей - наверное лучше возложеть на прокси.

"software layer7 (HTTP) load balancing по полям из http heade..."
Отправлено Sonny , 30-Июл-09 16:40 
>попробуйте просмотреть модуль string для iptables
>вот пример борьбы с одним типом риквеста http://spamcleaner.org/en/misc/w00tw00t.html
>единственное, это переписывание l7 полей - наверное лучше возложеть на прокси.

Спасибо, познавательная статья.
Правда для моего случая она не очень подходит, т.к. во первых, как я понял, использование модуля String позволяет только DROPать пакеты, содержащие заданную информацию, а не форвардить их в зависимости от этой строки на разные хосты.
А использование модулей TCP и Recent не позволяет реализовать функционал "TCP Delayed Binding", так как они позволяют лишь выделить пакет с HTTP запросом из проходящего трафика, а не принять вначале соединение "на себя", получить пакет с GET и после этого принять решение что с ним делать... Т.е. load balancing в зависимости от текста HTTP запроса на этих модулях не сделать.