haproxy принудительно перенаправляет на вход в систему и перенаправляет обратно

haproxy принудительно перенаправляет на вход в систему и перенаправляет обратно

У меня есть веб-сайтhttp://blahblah.com Я хочу добавить страницу входа в систему прежде всегоhttp://blahblah.com. Я написал простой код входа на php. Проблема в том, что я не могу изменить код в blahblah, это какой-то микросервис, написанный на Rust и других языках.

В login.php я могу перенаправить на blahblah.com по мере необходимости. Я знаю, что могу заставить haproxy перенаправлять на my-login.com, если люди заходят на blahblah.com, а затем в my-login.com я могу перенаправить на blahblah.com, но это может закончиться циклами.

Может ли кто-нибудь помочь/дать мне советы о том, какой должна быть конфигурация haproxy, чтобы это работало?

решение1

HAProxy может быть не лучшим инструментом для этого, но трудно сказать, не понимая вашу архитектуру и использование лучше. В любом случае, один из способов — использовать функцию mapдля выбора правильного бэкэнда.

Видетьhttps://www.haproxy.com/blog/introduction-to-haproxy-maps/, но примерно вы бы сделали что-то вроде

frontend frontend-blahblah
 bind *:443
 use_backend %[req.hdr(x-app-auth),map(/mnt/resource/token.map,backend-unauth)]

Файл карты /mnt/resource/token.mapбудет иметь список ключей аутентификации, каждый из которых сопоставляется с backend-authбэкэндом (т. е. blahblah.com). Любой, у кого нет ключа аутентификации, отправляется на backend-unauth(т. е. на ваш сервер входа).

Вам дополнительно необходимо будет сделать следующее:

  1. В этом примере приложению пришлось бы отправлять X-App-Authзаголовок с каждым запросом. Или изменить его, чтобы вместо этого использовать файлы cookie, например req.cook(APPAUTH).
  2. Когда пользователь входит или выходит из системы, файл карты /mnt/resource/token.mapдолжен быть обновлен вашим сервером входа. См. статью, указанную выше, для нескольких способов сделать это. Возможно, самый простой — использовать http-request set-mapи http-request del-mapи ограничить доступ к IP вашего сервера входа, например, заставить HAProxy прослушивать отдельный «порт управления» и отклонять запросы с других IP, а также любую другую безопасность. Например, ваш сервер входа может сделать вызовhttps://blahblah.com:8443/add-token/123456789... чтобы добавить ключ аутентификации.
  3. Серверу входа необходимо будет позаботиться об установке cookie/возврате ключа аутентификации клиенту. Вероятно, есть некоторые проблемы с кросс-сайтами, что означает необходимость корректировки заголовка HAProxy; вы, возможно, уже рассмотрели и решили их.

Все это грубый инструмент — пользователь вошел в систему и имеет разрешение на доступ к сайту или нет. Нет особой детализации, разделяющей пользователей; если вы этого хотите, вам лучше разместить свой сервер входа перед другим сайтом в качестве прокси.

Связанный контент