Está faltando um nome de servidor em seu unchiwa-backend:
server 127.0.0.1:3002 check
Isso deve ser algo como:
server uchiwa 127.0.0.1:3002 check
Estou seguindo este tutorial para configurar o HAProxy e o Let's Encrypt. O objetivo é encaminhar solicitações para example.com/sensu para uma instância do servidor que esteja ouvindo 127.0.0.1:3002. Mas quando eu visito example.com/sensu no meu navegador usando http ou https, sempre obtenho:
503 Service Unavailable
No server is available to handle this request.
Por que não consigo acessar o servidor por meio do HAProxy?
A configuração é a seguinte:
Meu domínio tem um ponto de registro para o IP público do meu roteador.
A máquina host do servidor está atrás do roteador e é atribuída a um IP privado (10.0.0.x). No roteador, eu encaminhei todo o tráfego na porta 80, 443 para esse IP privado (10.0.0.x: 80, 10.0.0.x: 443) e gerava com sucesso meus certificados usando o comando letsencrypt.
Na máquina, eu tenho este servidor, que é um painel uchiwa, sendo executado em um contêiner docker e escutando 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
e a porta é acessível a partir da máquina host:
$ telnet 127.0.0.1 3002
Trying 127.0.0.1...
Connected to 127.0.0.1.
O HAProxy está sendo executado diretamente no host. Aqui está o meu 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
O log do HAproxy não mostrou nada depois de iniciar todos os serviços de proxy, mesmo quando redirecionou com êxito minha solicitação http para 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...)
Eu também tentei vincular o servidor a todas as interfaces (0.0.0.0:3002). Onde foi que eu errei? Por favor ajude.
=============================================== ===========
ATUALIZAÇÃO:
Acontece que o nome do servidor é um campo obrigatório. Atualizei minhas configurações de back-end e agora não vejo mais o erro 503.
backend uchiwa-backend
option forceclose
redirect scheme https if !{ ssl_fc }
server uchiwa 172.17.0.6:3000
No entanto, agora estou recebendo um erro 404.
404 page not found
E aqui está o log:
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"
Está faltando um nome de servidor em seu unchiwa-backend:
server 127.0.0.1:3002 check
Isso deve ser algo como:
server uchiwa 127.0.0.1:3002 check
Tags haproxy