У меня есть сервер с API отдыха за haproxy, который прослушивает порт 5000. Конфигурация haproxy настраивает порт 5000 для приема HTTPS-соединений от клиента, а затем пересылает сообщение на сервер. Это работает правильно, и вот конфигурация для этого порта:
frontend service-front-1
bind 192.168.122.3:5000 ssl crt /etc/ssl/private/haproxy.pem ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
option httplog
option forwardfor except 127.0.0.0/8
option http-server-close
reqadd X-Forwarded-Proto:\ https
mode http
default_backend service-back
backend service-back
mode http
balance leastconn
stick store-request src
stick-table type ip size 256k expire 30m
option forwardfor
option httplog
option httpchk HEAD / HTTP/1.0\r\nUser-agent:\ osa-haproxy-healthcheck
server controller00_container-442ea37a 172.29.237.76:5000 check port 5000 inter 12000 rise 1 fall 1
На стороне клиента у меня теперь есть приложение, которое не может выполнить HTTPS и требует подключения к серверу. Он пытается с HTTP на порт 5000, но так как haproxy ожидает HTTPS для этого порта, что-то не получается, и я получаю:
Невозможно установить соединение ('Соединение прервано.', BadStatusLine ("''",))
К сожалению, я не могу удалить возможности HTTPS порта 5000, потому что некоторые приложения ожидают этого. Итак, могу ли я иметь обе возможности (HTTPS и HTTP) на порту 5000? Я попытался, просто добавив еще один фронт с этим конфигом:
frontend service-front-2
bind 192.168.122.3:5000
option httplog
option forwardfor except 127.0.0.0/8
option http-server-close
mode http
default_backend service-back
В результате это иногда работает. Мне кажется, что haproxy случайным образом выбирает один из двух интерфейсов, которые определяют порт 5000, и если клиент ожидает, что это будет работать,