Я только что погрузился в haproxy, и моя цель - настроить балансировщик нагрузки ssl terminated с одним внешним интерфейсом ubuntu и (на данный момент) одним сервером лампа (убунту). И клиентская, и внутренняя машины - это Ubuntu 18.04 на моем виртуальном боксе. Я использую Windows 10, если это имеет значение
Я просмотрел массу документов и ответов за последние несколько дней, но все еще не могу это исправить.
Эти 2 работают нормально:
Примечание. На внутреннем сервере нет сертификата ssl. Но у меня есть mkcert на машине haproxy, которая работает нормально - зеленый замок n все
Что не работает / Проблема:
Когда я захожу на сайт https через haproxy ( https : //mysite.testing) на странице отображается 503 Служба недоступна - сервер недоступен для обработки этого запроса
Мои настройки :
Я добавил эта строка в моем файле hosts , из которого я получаю доступ к mysite.testing:
192.168.56.105 mysite.testing
Мой haProxy.cfg файл:
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
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
tune.ssl.default-dh-param 2048
defaults
log global
mode http
option forwardfor
option http-server-close
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
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 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend FrontEnd_Http
bind *:80
reqadd X-Forwarded-Proto:\ http
default_backend My_Web_Servers
frontend FrontEnd_Https
bind 192.168.56.105:443 ssl crt /etc/haproxy/ssl/mysite.testing.pem
mode http
#reqadd X-Forwarded-Proto:\ https
default_backend My_Web_Servers
backend My_Web_Servers
mode http
balance roundrobin
server tad108 192.168.56.108
listen stats
bind :32700
stats enable
stats uri /
stats auth admin:admin
Мой apache2 conf файл (/ etc / apache2 / sites-enabled):
<VirtualHost *:80>
ServerName mysite.testing
ServerAlias www.mysite.testing
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/mysite.testing/public_html
ErrorLog /var/www/html/mysite.testing/logs/error.log
CustomLog /var/www/html/mysite.testing/logs/access.log combined
<Directory />
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Вопросы:
Большое спасибо за чтение :)
Когда вы настраиваете сервер
вот так ...
server tad108 192.168.56.108
... вы не сказали HAProxy, какой порт сервер использует для приема трафика, поэтому HAProxy предполагает вы планировали эквивалентное сопоставление 1: 1 возможных портов bind
на интерфейсе HAProxy
, куда прибыл трафик, и целевого порта на серверной части, поэтому трафик, поступающий на 80, идет на сервер на 80, в то время как трафик, поступающий на 443, идет на сервер на 443. Это редко то, что вам нужно, обычно это отправка всего трафика на один порт, например:
server tad108 192.168.56.108:80
Возможность сохранения исходного порта имеет некоторые интересные возможности для других приложений, но редко могут быть полезны для HTTP и HTTPS, поскольку в режиме http
,ожидается, что сервер
либо будет использовать TLS, либо нет, в зависимости от того, настроен ли параметр ssl
.
Вы также можете сохранить порт со смещением.
- необязательная спецификация порта. Если установлено, все соединения будут быть отправленным в этот порт. Если не задано, тот же порт клиент подключен к будет использоваться. Порт также может иметь префикс "+" или "-". В этом случае порт сервера будет определяться добавление этого значения в порт клиента.
http://cbonte.github.io/haproxy-dconv/1.8/configuration.html#server
(«Порт клиента», как здесь используется, относится к порту клиент подключился, а не порт источника в стеке TCP клиента.)