Рейтинг:0

выберите серверную часть haproxy tcp в зависимости от исходного IP-адреса

флаг de

У меня есть базовые знания haproxy и я знаю, как обрабатывать выбор бэкэндов tcp в зависимости от имени сервера SNI.

Соответствующие строки

    acl is_myhost req.ssl_sni -i my.host.com
    acl is_otherhost req.ssl_sni -i other.host.com


    use_backend mybackend, если is_myhost
    use_backend другой бэкэнд, если is_otherhost

Теперь я хотел бы изменить их на что-то, что позволяет мне выбирать серверную часть также в зависимости от исходного IP-адреса, но я не знаю точного синтаксиса для псевдоконфигурации ниже или возможно ли это вообще

    acl is_myhost_for_specif req.ssl_sni -i my.host.com <и исходный ip = 1.2.3.4>
    acl is_myhost_for_others req.ssl_sni -i my.host.com <и исходный IP-адрес != 1.2.3.4>
    acl is_otherhost req.ssl_sni -i other.host.com


    use_backend mybackend1, если is_myhost_for_specific
    use_backend mybackend2, если is_myhost_for_others
    use_backend другой бэкэнд, если is_otherhost

George Y avatar
флаг vn
как насчет того, чтобы спросить haproxy напрямую?
gelonida avatar
флаг de
Мне нравится настойчивость и возможность поиска вопросов на SO, поэтому я сначала попробовал здесь. Но да. отправить вопрос в список рассылки haproxy (`[email protected]`) — еще один вариант.
Рейтинг:2
флаг ng

Ваш псевдокод для ACL неверен, потому что объявление ACL не имеет синтаксиса для логики AND/OR. Переместите это в место, где вы используете ACL, как в примере ниже.
Для исходного IP есть источник (https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#7.3.3-src), например:

Обратите внимание, что синтаксис для сопоставления двух условий в операторе if не

use_backend mybackend, если условие1 и условие2

но просто

use_backend mybackend, если условие1 условие2

acl test_network источник 192.168.10.0/24
acl test_network источник 192.168.20.0/24
acl is_myhost_for_specif req.ssl_sni -i my.host.com

# оба ACL должны быть истинными (is_myhost **и** test_network)
use_backend mybackend1, если is_myhost test_network
use_backend mybackend2, если is_myhost

Порядок use_backend важно, поэтому IP-адреса из тестовая_сеть перейти к мой бэкенд1 а другие идут в мой бэкенд2 если SNI совпадает. Объявление тестовая_сеть ACL дважды означает, что «src_ip соответствует 192.168.10.0/24 ИЛИ 192.168.20.0/24».

gelonida avatar
флаг de
Спасибо. Ну, я знал, что мой псевдокод неверен. но, к счастью, этого было достаточно, чтобы объяснить мое намерение. Ваш ответ кажется **именно** тем, что я искал. Я не знал `test_network src`, я не знал, что списки контроля доступа могут содержать только одно условие и что оператор if может комбинировать списки контроля доступа. Отмечу как правильный ответ, как только проверю.
gelonida avatar
флаг de
трюк с двойным объявлением acl также очень полезен
gelonida avatar
флаг de
Наконец-то появилось время проверить ваш ответ. В строке небольшая ошибка `use_backend mybackend1, если is_myhost и test_network`, который должен быть `use_backend mybackend1, если is_myhost test_network` (без `и`. `И` подразумевается. Еще раз спасибо
gelonida avatar
флаг de
пометит как правильный ответ, как только ответ будет исправлен (мой запрос на изменение требует одобрения)
gelonida avatar
флаг de
Я добавил еще один комментарий к своим изменениям, так как кажется, что 20 рецензентов просмотрели мои изменения, но не чувствовали себя комфортно, принимая их. Я надеюсь, что мой дополнительный комментарий облегчит понимание/принятие изменения
gelonida avatar
флаг de
возможно, вы сможете применить изменение к своему ответу. Процедура проверки моего запроса на редактирование на удивление медленная из-за сбоя сервера. Вероятно, потому, что haproxy не так хорошо известен. Без предложенных мною изменений haproxy будет жаловаться на неизвестный `acl` с именем `and`

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.