Я пытаюсь предоставить разработчикам / тестерам возможность доступа к определенным серверам за 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 на балансировщике нагрузки, перестань делать это тогда.