Я пытаюсь заставить haproxy использовать ACL с SNI, но он не сотрудничает. Он представляет правильный сертификат, поэтому SNI должен работать. Однако я не могу заставить его выбирать серверную часть на основе имени хоста в SNI.
Что я проверяю конфигурацию, я получаю следующее
[ПРЕДУПРЕЖДЕНИЕ] (21486): прокси-сервер 'fe-dr-totalflood.com': образцы выборки L6 игнорируются на прокси-серверах HTTP (объявлено в ./haproxy.cfg.tmp:176).
[ПРЕДУПРЕЖДЕНИЕ] (21486): прокси-сервер 'fe-dr-totalflood.com': образцы выборки L6 игнорируются на прокси-серверах HTTP (объявлено в ./haproxy.cfg.tmp:177).
Предупреждения были найдены.
Файл конфигурации действителен
Я понятия не имею, что означают сообщения об ошибках, и я поставил примечание рядом с соответствующими строками в следующем фрагменте.
интерфейс fe-dr-totalflood.com
режим http
привязать 172.22.8.229:80
привязать 172.22.8.229:443 ssl crt dr-www.totalflood.com.crt crt dr-xml.totalflood.com.crt
## http->https редирект
схема перенаправления http-запроса https, если только { ssl_fc }
## списки контроля доступа
акл https ssl_fc
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
acl www-acl req_ssl_sni dr-www.totalflood.com
acl xml-acl req_ssl_sni dr-xml.totalflood.com
# если Let's Encrypt, пропустить остаток и перейти к серверной части
use_backend be-letsencrypt, если letsencrypt-acl
use_backend be-dr-www.totalflood.com, если www-acl <------ 176
use_backend be-dr-xml.totalflood.com, если xml-acl <------ 177
default_backend быть-нет-такой-сайт
#---------------------------------------------
серверная часть be-dr-www.totalflood.com
режим http
круговой баланс
cookie SERVERID вставить непрямой nocache maxidle 30m
## установить имя хоста в шапке
acl h_host_exists req.hdr(Host) -m найдено
Хост http-запроса del-header, если h_host_exists
http-запрос set-header Хост www.totalflood.com
проверка сервера по умолчанию maxconn 100
сервер scadmzp2wb01 scadmzp2wb01.lereta.net:80 cookie scadmzp2wb01
#---------------------------------------------
серверная часть be-dr-xml.totalflood.com
режим http
круговой баланс
cookie SERVERID вставить непрямой nocache maxidle 30m
## установить имя хоста в шапке
acl h_host_exists req.hdr(Host) -m найдено
Хост http-запроса del-header, если h_host_exists
http-запрос set-header Хост xml.totalflood.com
проверка сервера по умолчанию maxconn 100
сервер scadmzxml01 scadmzxml01.lereta.net:80 cookie scadmzxml01
#---------------------------------------------
бэкэнд be-letsencrypt
сервер локальный 127.0.0.1:8888
#---------------------------------------------
бэкэнд быть-нет-такой-сайт
сервер локальный 127.0.0.1:8888
Когда я пытаюсь получить доступ к любому сайту, я всегда попадаю в бэкенд по умолчанию, несмотря ни на что. Я проверил это, изменив бэкэнд по умолчанию, чтобы перейти в другие места. Если я
добавьте к любому URL-адресу путь /.well-known/acme-challenge, haproxy, кажется, отправляет меня в нужное место.
Чего я не могу понять, так это почему не работают списки управления доступом, основанные на информации SNI.
Я использую версию 2.4.2 haproxy OracleLinux 8.
$ хапрокси -v
HAProxy версии 2.4.2-553dee3 2021/07/07 - https://haproxy.org/
Статус: ветка с долгосрочной поддержкой — исправления перестанут получать примерно во втором квартале 2026 года.
Известные ошибки: http://www.haproxy.org/bugs/bugs-2.4.2.html
Работает на: Linux 5.4.17-2136.304.4.1.el8uek.x86_64 #2 SMP Вт, 8 февраля 11:54:24 PST 2022 x86_64