Resolvido: Eu precisava adicionar proxy_set_header Host $ host; para a seção do servidor.
Estou usando o haproxy e o nginx para balancear a carga e também proteger (por meio do naxsi no nginx) meus servidores da web. O Haproxy está funcionando bem, mas no momento em que eu o envio através do nginx, o padrão é tudo para o backend padrão, em vez de ser verificado no nosso backend de webmail. No erro nginx e no log de acesso, ele mostra o nome do host correto, mas ainda assim é enviado para baixo o default_backend bk_comweb em vez do use_backend bk_webmail. Há algo que estou perdendo, mas não consigo ver a floresta através das árvores, qualquer ajuda seria muito apreciada!
linhas importantes do haproxy.conf:
frontend ft_protection
bind 10.0.5.15:80
mode http
option http-server-close
#DDOS protection
#Use General Purpose Couter (gpc) 0 in SC1 as a global abuse counter
#Monitors the number of request sent by an IP over a period of 10 seconds
stick-table type ip size 1m expire 1m store gpc0,http_req_rate(10s),http_err_rate(10s)
tcp-request connection track-sc1 src
tcp-request connection reject if { sc1_get_gpc0 gt 0 }
#Abuser means more than 100reqs/10s
acl abuse sc1_http_req_rate gt 100
acl kill sc1_inc_gpc0 gt 10
acl save sc1_clr_gpc0 ge 0
tcp-request connection accept if !abuse save
tcp-request connection reject if abuse kill
default_backend bk_protection
backend bk_protection
mode http
option http-server-close
#If the source IP generated 10 or more http request over the defined period,
#flag the IP as abuser on the frontend
acl abuse sc1_http_err_rate gt 10
acl kill sc1_inc_gpc0 gt 0
tcp-request content reject if abuse kill
server waf1 10.0.5.3:81 maxconn 10000 check
frontend ft_web
bind 10.0.6.3:81
mode http
option http-server-close
acl webmail hdr(host) -i newwebmail.example.com
acl comwebmail hdr_beg(host) -i webmail
use_backend bk_webmail if webmail or comwebmail
default_backend bk_comweb
nginx.conf:
http {
include /etc/nginx/naxsi_core.rules;
include mime.types;
server_names_hash_bucket_size 128;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_disable "MSIE [1-6].(?!.*SV1)";
server {
proxy_set_header Proxy-Connection "";
listen 10.0.5.3:81;
location / {
include /etc/nginx/test.rules;
proxy_pass http://10.0.6.3:81/;
}
error_page 403 /403.html;
location = /403.html {
root /opt/nginx/html;
internal;
}
location /RequestDenied {
return 403;
}
}
}
Resolvido: Eu precisava adicionar proxy_set_header Host $ host; para a seção do servidor.