У меня есть сервер с настройкой HAProxy. Я пытаюсь подключить свой общедоступный IP-адрес к нескольким серверам, которые предлагают РАЗНЫЕ услуги через внешние порты.
Таким образом, порт 80 будет направлен на сервер 1, порт 100 будет перенаправлять на сервер 2 и т. Д.
Эта часть пока работает, у меня проблемы с получением сертификата ssl от сервера haproxy для передачи трафика с сертификатом. Когда я пытаюсь получить доступ к другому сайту, кроме основного, с запущенным haproxy. Я получаю следующую ошибку.
NET::ERR_CERT_COMMON_NAME_INVALID
Я довольно много просматривал Stack Exchange, Google, форумы. Я стер первые сегменты своих IP-адресов из конфигурации ниже. Они есть в моем конфиге на моем сервере. Я также стер шифр из конфигурации ниже.
Чего не хватает?
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
maxconn 2048
tune.ssl.default-dh-param 2048
# Default SSL material locations
ca-base /etc/ssl/certs
#ca-base /etc/haproxy/certs/
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
# An alternative list with additional directives can be obtained from
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
ssl-default-bind-ciphers xxxx
ssl-default-bind-options no-sslv3
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
option forwardfor
option http-server-close
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 504 /etc/haproxy/errors/504.http
frontend www-http
#bind x.x.x.250:80
#bind x.x.x.26:2000
bind *:80
reqadd X-Forwarded-Proto:\ http
acl url_red path_beg /red
use_backend red-backend if url_red
default_backend www-backend
#default_backend www-backend
#acl url_prox path_beg /prox
#use_backend prox-beckend if url_prox
frontend www-https
bind x.x.x.250:443 ssl crt /etc/haproxy/certs/roots.systems.pem
#bind x.x.x.26:2000 ssl crt /etc/haproxy/certs/roots.systems.pem
reqadd X-Forwarded-Proto:\ https
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
use_backend letsencrypt-backend if letsencrypt-acl
#default_backend www-backend
acl url_prox path_beg /prox
use_backend prox-backend if url_prox
acl url_red path_beg /red
use_backend red-backend if url_red
default_backend www-backend
backend www-backend
redirect scheme https if !{ ssl_fc }
#server www-1 x.x.x.25:80 check
#server www-2 x.x.x.27:2551 check
server www-3 127.0.0.1:84 check
backend letsencrypt-backend
server letsencrypt 127.0.0.1:54321
backend prox-backend
redirect scheme https if !{ ssl_fc }
server prox01 x.x.x.25:1457 check inter 2000
backend red-backend
redirect scheme https if !{ ssl_fc }
server www-1 x.x.x.26:2000 check
'
РЕДАКТИРОВАТЬ: Забыл упомянуть, что у меня есть запись CNAME в моем домене, которая перенаправит все поддомены обратно на общедоступный IP-адрес домена.
Итак, при доступе к службе a, перейдите на test.example.com
Понятно.
Запустите "openssl x509 -in YourCert.pem -text -noout" и сравните с https://www.ssllabs.com/ssltest/
Это подтвердило, что использовался старый сертификат. После дальнейшего расследования вызов сертификата был отменен в файле конфигурации. Это решило проблему с сертификатом. Для использования нескольких служб с одним общедоступным IP-адресом вместо этого потребовался следующий метод настройки:
acl is_site2 hdr(host) -i something.example.com
use_backend site2 if is_site2