Назад | Перейти на главную страницу

Как я могу получить прямой доступ к серверу за HAProxy?

Я пытаюсь предоставить разработчикам / тестерам возможность доступа к определенным серверам за HAProxy, чтобы облегчить тестирование. Прямо сейчас мы делаем это путем прямого доступа к имени хоста сервера (например, server1.mywebsite.com), но мы видели различия, касающиеся виртуальных хостов, ssl и т. Д. Я хотел бы установить cookie или строка запроса arg или что-то в этом роде, чтобы я мог принудительно использовать сервер ...

что-то вроде www.mywebsite.com (с cookie super_secret_cookie = server1) или www.mywebsite.com?super_secret_key=server1

Чтобы было ясно, это будет использоваться внутренними пользователями, а не общественностью в целом.

Идеи?

Изменить: я использую версию 1.3.12

Думаю, ваш вопрос устарел, но для тех, кто придет после, вот как я это сделал:

мы определяем некоторый acl:

frontend http-in
acl has_server1_cookie  hdr_beg(cookie) server1

use_backend single_server1_backend if has_server1_cookie

и, конечно же, мы должны определить этот бэкэнд:

backend single_server1_backend 
server server1.mywebsite.com 192.168.1.123:80 maxconn 32 check

мы даже можем добавить в секцию backend следующие

reqadd backend:\ server1

который скажет haproxy добавить к каждому запросу, отправляемому на server1, заголовок http

backend: server1

что приятно и полезно для проверки, чтобы убедиться, что это действительно работает ..

Вы излишне усложняете вещи. Если у вас есть «различия, касающиеся виртуальных хостов, ssl и т. Д.», То УСТРАНИТЕ ЭТО. Когда вы начнете работать с файлами cookie и аргументами строки запроса (собираетесь ли вы изменить свое приложение, чтобы сохранить эту строку запроса arg в каждом запросе? Даже Больше осложнения ...) вы просто усложняете вещи, а это означает, что их труднее отлаживать, более вероятно, что это будет случайно сломано из-за несвязанного изменения, и, как правило, вы просто усложняете жизнь себе и все остальные.

Итак, сделайте шаг назад и вместо того, чтобы спрашивать о реализации полусырого решения, которое вы придумали, задайте вопрос о как решить вашу проблему. "У нас есть haproxy, и мы хотели бы получить доступ к машинам напрямую, но когда мы это сделаем, мы получим (описать разницу с виртуальными хостами). "

Я предполагаю, что ваша проблема с vhosts заключается в том, что они не настроены для прямого приема имени машины, что тривиально исправить - дополнительная запись в server_name (или новый ServerAlias) доставит вас туда. Для SSL это немного сложнее, если вы не используете сертификат с подстановочными знаками, но поскольку это только внутренние пользователи, игнорирование предупреждения SSL является (полу) допустимым решением проблемы - или вы можете просто запустить отдельный сертификат SSL для машинного оборудования (на внутреннем CA). Если вы завершаете SSL на балансировщике нагрузки, перестань делать это тогда.