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

Служба HAproxy 503 недоступна

Я слежу этот учебник для настройки HAProxy и Let's Encrypt. Цель состоит в том, чтобы перенаправить запросы на example.com/sensu экземпляру сервера, который прослушивает 127.0.0.1:3002. Но когда я захожу на example.com/sensu в своем браузере по http или https, я всегда получаю:

503 Сервис недоступен

Нет доступных серверов для обработки этого запроса.

Почему я не могу подключиться к серверу через HAProxy?

Настройка выглядит следующим образом:

В моем домене есть точка записи для общедоступного IP-адреса моего маршрутизатора.

Хост-компьютер сервера находится за маршрутизатором и ему назначен частный IP-адрес (10.0.0.x). На маршрутизаторе я перенаправил весь трафик на порты 80, 443 на этот частный IP-адрес (10.0.0.x: 80, 10.0.0.x: 443) и успешно сгенерировал свои сертификаты с помощью letsencrypt.

На машине у меня есть этот сервер, который представляет собой приборную панель учива, работающий в контейнере докеров и прослушивающий 127.0.0.1:3002

$docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                                                      NAMES
48889effb2fb        uchiwa/uchiwa        "/go/bin/uchiwa -c /c"   About an hour ago   Up About an hour    127.0.0.1:3002->3000/tcp                                                   uchiwa

и порт доступен с хост-машины:

$ telnet 127.0.0.1 3002
Trying 127.0.0.1...
Connected to 127.0.0.1.

HAProxy работает непосредственно на хосте. Вот мой haproxy.cfg

global
        log /dev/log    local0
        log /dev/log    local1 notice
        debug
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon
        maxconn 500
        tune.ssl.default-dh-param 2048

        # Default SSL material locations
        ca-base /etc/ssl/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/
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
        ssl-default-bind-options no-sslv3

defaults
        log     global
        mode    http
        option forwardfor
        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 www-http
   bind :80
   reqadd X-Forwarded-Proto:\ http
   acl uchiwa path_beg /sensu
   use_backend uchiwa-backend if uchiwa
frontend www-https
   bind :443  ssl crt /etc/haproxy/certs/example.com.pem
   reqadd X-Forwarded-Proto:\ https
   acl uchiwa path_beg /sensu
   acl letsencrypt-acl path_beg /.well-known/acme-challenge/
   use_backend uchiwa-backend if uchiwa
   use_backend letsencrypt-backend if letsencrypt-acl
backend uchiwa-backend
   redirect scheme https if !{ ssl_fc }
   server 127.0.0.1:3002 check
backend letsencrypt-backend
   server letsencrypt 127.0.0.1:54321

Журнал HAproxy ничего не показал после запуска всех прокси-сервисов, даже когда он успешно перенаправил мой http-запрос на https:

Jul 24 16:54:56 <hostmachine> haproxy[18640]: Proxy www-http started.
Jul 24 16:54:56 <hostmachine> haproxy[18640]: Proxy www-http started.
Jul 24 16:54:56 <hostmachine> haproxy[18640]: Proxy www-https started.
Jul 24 16:54:56 <hostmachine> haproxy[18640]: Proxy www-https started.
Jul 24 16:54:56 <hostmachine> haproxy[18640]: Proxy uchiwa-backend started.
Jul 24 16:54:56 <hostmachine> haproxy[18640]: Proxy uchiwa-backend started.
Jul 24 16:54:56 <hostmachine> haproxy[18640]: Proxy letsencrypt-backend started.
(nothing after this line...)

Я также пробовал привязать сервер ко всем интерфейсам (0.0.0.0:3002). Где я неправ? Пожалуйста помоги.

================================================== ========

ОБНОВИТЬ:

Оказывается, имя сервера - это обязательное поле. Я обновил настройки бэкэнда, и теперь ошибка 503 больше не отображается.

backend uchiwa-backend
   option forceclose
   redirect scheme https if !{ ssl_fc }
   server uchiwa 172.17.0.6:3000

Однако теперь я получаю ошибку 404.

404 Страница не найдена

А вот журнал:

Aug  7 03:38:41 <hostmachine> haproxy[723]: 192.168.1.1:57720 [07/Aug/2016:03:38:41.957] www-https~ uchiwa-backend/uchiwa 4/0/0/0/5 404 195 - - ---- 0/0/0/0/0 0/0 "GET /sensu HTTP/1.1"
Aug  7 03:38:42 <hostmachine> haproxy[723]: 192.168.1.1:57721 [07/Aug/2016:03:38:42.293] www-https~ www-https/<NOSRV> -1/-1/-1/-1/3 503 213 - - SC-- 0/0/0/0/0 0/0 "GET /favicon.ico HTTP/1.1"

В вашем unchiwa-backend отсутствует имя сервера:

server 127.0.0.1:3002 check

Это должно быть примерно так:

server uchiwa 127.0.0.1:3002 check