Para redirecionar vários subdomínios no mesmo IP para hosts diferentes, estou usando o haproxy (1.7.5, Debian estável) e funciona bem. No entanto, também quero restringir o acesso a alguns hosts por IP e exibir uma mensagem limpa (página de erro 403 adequada) para hosts rejeitados, e é aí que não consigo encontrar uma solução.
O melhor que tenho até agora é uma configuração que usa um backend "reject"; no entanto, não sei como configurar este para obter nada além de erros SSL do final do navegador.
A configuração fica assim:
frontend http_redirect
bind *:80
redirect scheme https if !{ ssl_fc }
frontend tls_router
bind *:443
mode tcp
option tcplog
option tcpka
acl demo_acl req_ssl_sni -i demo.myhost.org
acl www_acl req_ssl_sni -i www.myhost.org
acl demo_network_allowed src 10.1.1.0/24
use_backend demo_tls if demo_acl
use_backend wwww_tls if www_acl
use_backend reject_access if demo_acl !demo_network_allowed
backend www_tls
mode tcp
option tcpka
server www_srv 192.168.1.2:443
backend demo_tls
mode tcp
option tcpka
server demo_srv 192.168.1.3:443
backend reject_access
mode http
# errorfile 403 /etc/haproxy/errors/403.http
# server demo 192.168.1.2:443
http-request set-path www.myhost.org/403.html
http-request redirect scheme https if ! { ssl_fc }
Como fica claro no backend "reject_access", tentei várias coisas com o mesmo resultado:
$ LANG=C wget --no-check-certificate -S https://demo.myhost.org
--2019-07-01 18:48:31-- https://demo.host.org/
Résolution de demo.myhost.org? 10.12.24.1
Connexion à demo.myhost.org|10.12.24.1|:443? connecté.
OpenSSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Incapable d'établir une connexion SSL.
Qualquer ajuda nesta configuração é bem-vinda.
Você não pode alterar url para solicitação ssl no modo tcp. Você tem que terminar o ssl no haproxy
Erro diz que não pode fazer conexão SSL. Rejeitar back-end faz solicitação http para 443
Edit , exemplo de terminação SSL