Бэкэнд HAProxy — как подключиться к удаленному серверу?

Бэкэнд HAProxy — как подключиться к удаленному серверу?

Добрый день всем,

Я новичок в веб-хостинге и все еще чувствую, что учусь плавать посреди океана. Я хочу настроить HAproxy для пересылки запроса на удаленный сервер в бэкэнде. Этот сервер SSL и за Cloudflare.

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

Я сейчас использую на сервере контейнер NginxProxyManager и изучаю возможности балансировки нагрузки HAProxy. До сих пор я успешно обходил локальные контейнеры, но с удаленными серверами я всегда получаю ответ в статистике «Down for Maintenance». Я также запустил в терминале в контейнере ha-proxy команду wget, и она может видеть внешний мир. Если я пингую изнутри контейнера HAProxy Google, он пингует его. Все контейнеры подключены как к сети моста, так и к сети, созданной пользователем (драйвер моста) в docker. Вот почему я полностью запутался. Итак, главный вопрос: можно ли это сделать, и если возможно, возможен ли следующий сценарий (?):

  1. Клиент делает https-запрос к HAProxy
  2. С помощью roundrobin я (хотел бы) переключаться между локальными контейнерами и удаленными серверами
  3. Когда я доберусь до раунда «удалённого сервера», я хотел бы отправить с бэкэнда правильный хост сервера (переписанный — я уже могу это сделать, но для локальных контейнеров) вместе с информацией о том, что это запрос SSL.
  4. Затем NginxProxyManager или другой HAProxy перенаправит его в подключенный там контейнер, получит ответ и отправит его обратно (первому) HAProxy, а последний — клиенту.

Я даже не уверен, возможно ли это. Посмотрите на следующее. Это работает с локальными контейнерами, но не с удаленным сервером. Он отправляет запрос и переписывает имя заголовка Host. Вот haproxy.cfg

global
        maxconn     4000
        daemon

defaults
        mode    http
        default-server init-addr last,libc,none
        option  http-keep-alive
        option  redispatch
        retries 3
        timeout connect 10s
        timeout client  1m
        timeout server  1m
        option forwardfor 


resolvers mynameservers
   nameserver ns2 8.8.8.8:853


frontend stats
        bind *:8500
        stats enable
        stats uri /
        stats refresh 10s


frontend ft
        bind 0.0.0.0:443 ssl crt /usr/local/etc/haproxy/ha_trial.pem  
        default_backend bt2

backend bt2
        balance roundrobin
        http-send-name-header Host        
        server web1 web1:8080 check
        server web2 web2:8080 check
        server web3 web3:8080 check        
        server myback.mysite.com myback.mysite.com:443 ssl verify none resolvers mynameservers
## the latter does not work - it ends at down for maintenance in statistics and in logs it says: Layer6 invalid response, info: "SSL handshake failure" while it is "verify none"

Если вы можете помочь мне с ответом, если вы его знаете, и/или с какими-то ссылками, все люди, такие как я, и особенно я, были бы вам очень признательны.

Спасибо

решение1

Случай как раз и есть случай сбоя SSL Handshake, потому что образ докера HAProxy не поддерживает QUIC, а бэкенд находится за Cloudflare, который по умолчанию поддерживает QUIC. Если я использую другой домен, который не поддерживает QUIC в протоколе связи https, все работает как часы. Мне также интересно, почему, черт возьми, он обрабатывает фронтенд и бэкенд по-разному??? Во фронтенде он понимает QUIC (? - или это QUIC между вами и cloudflare, а между cloudflare и сервером разное шифрование?), но подключение из бэкенда невозможно?

Итак, вкратце:

  1. Образ докера HAProxy не поддерживает QUIC - по крайней мере тот, что у меня есть (Alpine)
  2. Cloudflare по умолчанию активировал QUIC в качестве протокола связи для своих продуктов, и вы не можете изменить его.
  3. Сотрудничество этих двух факторов, очевидно, невозможно, и это бросает вам в лицо «Ошибку установления связи SSL».
  4. Чтобы исправить это, воспользуйтесь услугами провайдера, который не поддерживает новейшие протоколы связи. На данный момент это всего лишь способ смягчения проблемы, а не решение.
  5. Сайт HAProxy предоставляет способ перекомпиляции HAProxy из github с поддержкой QUIC, и я изучу этот вопрос позже...

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