У меня есть настройка haproxy с несколькими серверами haproxy, которые маршрутизируют кластер серверов приложений. Я бы хотел, чтобы haproxy выполнял все завершение ssl.
Прямо сейчас https-запросы пересылаются на серверы приложений как https. Итак, что я хотел бы:
user <-https-> Haproxy <-http-> Application
user <-http-> Haproxy <-http-> Application
Я видел несколько конфигураций, которые полностью посвящены использованию haproxy, чтобы заставить пользователя обновить схему до https, и тогда вся система будет работать по https. Это не то, что я ищу - я хочу, чтобы серверы приложений всегда были в http.
Кажется, я нашел ответ:
defaults
option forwardfor
option http-server-close
frontend www-http
bind :80
reqadd X-Forwarded-Proto:\ http
default_backend my-backend
frontend www-https
bind :443 ssl crt /etc/haproxy/ssl/oroboro.com.pem
reqadd X-Forwarded-Proto:\ https
default_backend my-backend
Добавьте эти две опции по умолчанию. forwardfor добавляет заголовки X-Forwarded-For. Затем создайте два фронта, один привязанный к http, а другой к https, вот что делают привязывающие линии. На фронтенде https мы поместили параметры для расшифровки ssl. После этого haproxy будет переадресовывать запросы по http.
Заголовок X-Forwarded-Proto, чтобы ваш сервер приложений мог знать, какой протокол используют пользователи в случае, если вы хотите сгенерировать страницу по-другому для пользователей, не использующих https (например, не отображать определенное содержимое)
.