nginx por trás do haproxy - páginas carregando aleatoriamente independentemente do domínio enviado

nginx por trás do haproxy - páginas carregando aleatoriamente independentemente do domínio enviado

Atualmente, tenho um servidor web (10.0.0.77) executando nginx com vários vhosts (alguns sites wordpress e instalação nextcloud), todos rodando em 1 endereço IP e tudo é protegido com um certificado curinga. Isso está funcionando bem - tanto interna quanto externamente

Agora quero fazer proxy de todo o tráfego externo via HAproxy. Abaixo está minha configuração haproxy simplificada para um site wordpres e nextcloud:

global
log /dev/log    local0
log /dev/log    local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
maxconn 4096
user haproxy
group haproxy
daemon


defaults
log     global
mode    tcp
option  tcplog
option  dontlognull
timeout connect 15s
timeout client  15s
timeout server  15s
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 localhost80  
bind *:80
mode http
redirect scheme https code 301 if !{ ssl_fc }

frontend localhost443   
bind *:443
option tcplog
mode tcp
acl tls req.ssl_hello_type 1
tcp-request inspect-delay 5s
tcp-request content accept if tls

acl is_wordpress req.ssl_sni -i nextcloud.domain.com   
acl is_nextcloud req.ssl_sni -i wordpress.domain.com  

use_backend nextcloud_cluster if is_nextcloud  
use_backend wordpress_cluster if is_wordpress

backend wordpress_cluster
mode tcp
option ssl-hello-chk
server is_wordpress 10.0.0.77:443 check 


backend nextcloud_cluster
mode tcp
option ssl-hello-chk
server is_nextcloud 10.0.0.77:443 check

O problema é que assim que eu redirecionar o tráfego externo para rodar através do meu haproxy, se eu tentar instalar, ou seja. nextcloud.domain.com Às vezes recebo wordpress.domain.com e vice-versa.

Alguma idéia de onde estou errando?

Responder1

Ao usar SNI para diferenciar backends, você deve estar ciente de que neste caso específico os clientes não SNI não conseguirão acessar os sites.

No entanto, se isso estiver bom para seus clientes e você ainda equilibrar no mesmo backend (como no exemplo), você ainda terá informações redundantes em sua configuração. A abordagem mais simples aqui seria:

frontend localhost443   
  bind *:443
  option tcplog
  mode tcp
  default_backend backend1

backend backend1
  mode tcp
  option ssl-hello-chk
  server server1 10.0.0.77:443 check 

Como sua configuração é simplesmente um balanceamento de camada 4, se você ainda obtiver sites aleatórios, terá que examinar o servidor da web em execução em 10.0.0.77:443 um pouco mais de perto: Qual servidor da web, como está configurado, ele produz o mesmo problema quando acessado diretamente?

informação relacionada