HTTPS и HTTP через один и тот же порт в haproxy - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть сервер с 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, и если клиент ожидает, что это будет работать,

...