У меня возникли проблемы с настройкой HAProxy в качестве балансировщика нагрузки TCP (уровень 4), и я хотел бы получить ваш совет по этому поводу.
Я следил за многими руководствами в Интернете, и я придумал эту конфигурацию (не показывая никаких ошибок в журналах, она запускается хорошо):
примечание: реальные доменные имена замаскированы
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
daemon
user haproxy
group haproxy
log /dev/log local6 debug
maxconn 50000
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
#---------------------------------------------------------------------
# common defaults
#---------------------------------------------------------------------
defaults
mode tcp
log global
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
#---------------------------------------------------------------------
# dedicated stats page
#---------------------------------------------------------------------
listen stats
mode http
bind :22222
stats enable
stats uri /haproxy?stats
stats realm Haproxy\ Statistics
stats auth xxxxxx:xxxxxxxx
stats refresh 30s
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main_https_listen
bind *:443
mode tcp
option tcplog
# -------------------------------
# ACLs - SIT
# -------------------------------
acl acl_SIT_CI5 req.ssl_sni -i url1.domain.net
acl acl_SIT_HR8 req.ssl_sni -i url2.domain.net
# -------------------------------
# Conditions - SIT
# -------------------------------
use_backend backend_SIT_CI5 if acl_SIT_CI5
use_backend backend_SIT_HR8 if acl_SIT_HR8
#---------------------------------------------------------------------
# Backends
#---------------------------------------------------------------------
backend backend_SIT_CI5
mode tcp
balance source
option ssl-hello-chk
server server_SIT_CI5_1 host1.domain.net:443 check
server server_SIT_CI5_2 host2.domain.net:443 check
backend backend_SIT_HR8
mode tcp
balance source
option ssl-hello-chk
server server_SIT_HR8_1 host1.domain.net:443 check
server server_SIT_HR8_2 host2.domain.net:443 check
Я указал host1.domain.net на свой haproxy vIP (он имеет конфигурацию keepalived с виртуальным IP).
сейчас при доступе https://url1.domain.net (или даже https: // loadbalancerURL но я предполагаю, что это нормально для этого) у меня есть ошибка Эта страница не может быть отображена. Включите TLS 1.0, TLS 1.1 и TLS 1.2 в дополнительных настройках и попробуйте подключиться к https://host1.domain.net очередной раз.
один openssl s_client дает ошибка подтверждения ssl (сертификатов нет блабла).
ты хоть представляешь, что я сделал не так? Кроме того, мне нужно установить некоторые сертификаты, когда я слушаю на 443? (даже если я не хочу, чтобы эти сертификаты расшифровывались или что-то еще, поскольку я хочу, чтобы мой HAProxy действовал только как прокси).
Я также попытался активировать режим отладки для ведения журнала, но он не показал никаких ошибок (ни новых журналов)
примечание: бэкэнды расположены за межсетевыми экранами, связь между бэкэндами с HAProxy не открывается на 443 (только ОТ Haproxy к бэкэндам), должно ли оно быть направленным? и почему ?
note2: в статистике haproxy я могу видеть все бэкэнды UP
кроме того, есть ли способ узнать / проверить, работает ли перенаправление на основе имени хоста (SNI) или нет? (у меня такое впечатление, что соединение остается на балансировщике нагрузки и не перенаправляется на бэкэнд, поэтому у меня ошибка)
а haproxy -vv дает:
HA-Proxy version 1.5.18 2016/05/10
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>
Build options :
TARGET = linux2628
CPU = generic
CC = gcc
CFLAGS = -O2 -g -fno-strict-aliasing -DTCP_USER_TIMEOUT=18
OPTIONS = USE_LINUX_TPROXY=1 USE_GETADDRINFO=1 USE_ZLIB=1 USE_REGPARM=1 USE_OPENSSL=1 USE_PCRE=1
Default settings :
maxconn = 2000, bufsize = 16384, maxrewrite = 8192, maxpollevents = 200
Encrypted password support via crypt(3): yes
Built with zlib version : 1.2.7
Compression algorithms supported : identity, deflate, gzip
Built with OpenSSL version : OpenSSL 1.0.2k-fips 26 Jan 2017
Running on OpenSSL version : OpenSSL 1.0.2k-fips 26 Jan 2017
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports prefer-server-ciphers : yes
Built with PCRE version : 8.32 2012-11-30
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT IP_FREEBIND
Available polling systems :
epoll : pref=300, test result OK
poll : pref=200, test result OK
select : pref=150, test result OK
Total: 3 (3 usable), will use epoll.
фу, я заставил его работать, добавив это в интерфейс (после просмотра эта почта:)
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
дело в том, что я не знаю, что делают эти параметры ... или зачем мне их указывать. Означает ли это, что поведение HAProxy по умолчанию - отклонять что-либо?