Назад | Перейти на главную страницу

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

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

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

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

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

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