объединение сертификата и ключа для haproxy
Код: Выделить всё
cat /etc/letsencrypt/live/o.fnx1.ru/fullchain.pem /etc/letsencrypt/live/o.fnx1.ru/privkey.pem > /etc/haproxy/cert.o.fnx1.ru.pem
/etc/haproxy/haproxy.cfg
Код: Выделить всё
frontend http_in
bind *:80
bind *:443 ssl crt /path/to/cert.pem # если нужен HTTPS
# Проверка домена
acl host_ha1 hdr(host) -i ha1.ly
acl host_ha2 hdr(host) -i ha2.ly
# Перенаправление на бэкенды
use_backend backend_ha1 if host_ha1
use_backend backend_ha2 if host_ha2
backend backend_ha1
mode tcp
server server1 172.16.16.16:0 check
backend backend_ha2
mode tcp
server server2 172.17.17.17:0 check
bind *:80 и bind *:443 — слушает все входящие соединения на портах 80 и 443.
hdr(host) — проверяет заголовок Host.
acl host_ha1 и acl host_ha2 — определяют, какой домен запрашивают.
use_backend выбирает нужный бэкенд в зависимости от домена.
В бэкендах используется mode tcp и указывается IP, но порт 0. В этом случае HAProxy будет проксировать весь трафик на порт, указанный в исходящем соединении. Однако, чтобы прокинуть все порты, необходимо использовать tcp-mode и proxy-режим.
Важно:
Чтобы проксировать все порты, нужно использовать mode tcp и выбрать tcp-проксирование. Также, нужно удостовериться, что HAProxy работает в tcp-режиме и использует transparent или tcp-режим, чтобы проксировать все порты. Это не стандартная настройка для HAProxy — он обычно проксирует на конкретный порт.
Если вы хотите, чтобы HAProxy слушал все порты на внешнем интерфейсе и перенаправлял их на внутренние IP, то это делается так:
Код: Выделить всё
# Слушает все порты на внешнем интерфейсе
bind *:0-65535
frontend all_ports
mode tcp
bind *:0-65535
acl host_ha1 hdr(host) -i ha1.ly
acl host_ha2 hdr(host) -i ha2.ly
tcp-request inspect-delay 5s
tcp-request content accept if true
use_backend backend_ha1 if host_ha1
use_backend backend_ha2 if host_ha2
backend backend_ha1
mode tcp
server server1 172.16.16.16:0
backend backend_ha2
mode tcp
server server2 172.17.17.17:0
Указание порта 0 в server означает "использовать порт, с которым идет соединение".
Для полноценной работы с любыми портами, возможно потребуется использовать transparent режим и настройку iptables для перенаправления.