haproxy ssl termination работает на http, НО не работает на https с 503 - на Virtualbox apache2 ubuntu 18.04 backend server

Я только что погрузился в haproxy, и моя цель - настроить балансировщик нагрузки ssl terminated с одним внешним интерфейсом ubuntu и (на данный момент) одним сервером лампа (убунту). И клиентская, и внутренняя машины - это Ubuntu 18.04 на моем виртуальном боксе. Я использую Windows 10, если это имеет значение

Я просмотрел массу документов и ответов за последние несколько дней, но все еще не могу это исправить.

Эти 2 работают нормально:

  1. Серверная часть сервер обслуживает сайт без проблем, если я обращаюсь к нему через http из браузера ( http : //mysite.testing)
  2. Внутренний сервер обслуживает сайт без проблем, если я захожу сайт напрямую через IP-адрес внутреннего сервера ( http : //192.168.56.108)

Примечание. На внутреннем сервере нет сертификата 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>

Вопросы:

  • Что могло вызвать ошибку 503?
  • Это проблема внутреннего сервера apache2 или моего внешнего интерфейса haproxy.cfg?
  • Как мне исправить это, чтобы сайт работал с https: //mysite.testing без 503?

Большое спасибо за чтение :)

0
задан 18 October 2019 в 01:39
1 ответ

Когда вы настраиваете сервер вот так ...

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 клиента.)

1
ответ дан 4 December 2019 в 15:36

Теги

Похожие вопросы