Encontrado.
O problema óbvio é que a diretiva ACL está contando com cabeçalhos HTTP: dado que o HAProxy não conseguirá extrair os cabeçalhos do tráfego HTTPS e o OpenVPN não os possui, a ACL não tem efeito e o uso de default_backend
é esperado aqui.
Meu primeiro pensamento foi usar req.ssl_sni
em vez de hdr(host)
. Isso tornaria possível - pensei - detectar se o tráfego é ou não HTTPS:
acl host_non_vpn req.ssl_sni -m sub -i example.com
use_backend vpn_backend if !host_non_vpn
use_backend nginx_pool_ssl if host_non_vpn
Embora funcionasse bem para solicitações do navegador, tive um problema em que parte do tráfego de svn
para WebDAV por meio de HTTPS foi redirecionada para o servidor OpenVPN. Não tenho certeza do que está acontecendo aqui e, sem rastrear o tráfego de rede, foi difícil encontrar o problema, nem quais solicitações estavam com defeito e por quê.
Acabei mudando o OpenVPN para a porta 80. Usando pré-definida HTTP
ACL , a configuração agora está parecendo assim:
frontend www_http
mode tcp
bind *:80
use_backend nginx_pool_http if HTTP
use_backend vpn_backend if !HTTP