Я только что погрузился в haproxy, и моя цель - настроить SSL прекращено loadbalancer с одним внешним интерфейсом ubuntu и (на данный момент) одной внутренней лампой (ubuntu). И клиентская, и внутренняя машины - это Ubuntu 18.04 на моем виртуальном ящике. Я использую Windows 10, если это важно
Я просмотрел массу документов и ответов за последние несколько дней, но все еще не могу это исправить.
Эти 2 работают нормально:
Примечание. На внутреннем сервере нет SSL-сертификата. Но я установил mkcert на машине haproxy, которая отлично работает - зеленый замок на всех
Что не работает / Проблема:
Когда я получаю доступ к 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
как это...
server tad108 192.168.56.108
... вы не сказали HAProxy, какой порт сервер использует для приема трафика, поэтому HAProxy предполагает, что вы запланировали эквивалентное сопоставление 1: 1 возможных bind
порты на HAProxy frontend
куда прибыл трафик, и целевой порт на бэкэнде, поэтому трафик, поступающий на 80, идет на сервер на 80, в то время как трафик, поступающий на 443, идет на сервер на 443. Это редко то, что вам нужно, обычно это отправка всего трафик на один порт, например:
server tad108 192.168.56.108:80
Возможность сохранить исходный порт имеет некоторые интересные возможности для других приложений, но редко будет полезна для HTTP и HTTPS, поскольку в mode http
, то server
ожидается, что он будет говорить TLS или нет, в зависимости от того, ssl
опция настроена.
Вы также можете сохранить порт со смещением.
<port>
- необязательная спецификация порта. Если установлено, все соединения будут отправляться на этот порт. Если не задан, будет использоваться тот же порт, к которому подключился клиент. Порт также может иметь префикс «+» или «-». В этом случае порт сервера будет определяться добавлением этого значения к порту клиента.http://cbonte.github.io/haproxy-dconv/1.8/configuration.html#server
(Используемый здесь термин «порт клиента» относится к порту, к которому подключился клиент, а не к исходному порту в стеке TCP клиента.)