虽然主机名在acl中,但HAproxy有时会提供默认后端的内容

我正在使用HAProxy 1.4.22。 我有以下haproxy.conf文件:

global maxconn 100000 daemon defaults mode http retries 1 contimeout 8000 clitimeout 120000 srvtimeout 120000 stats enable stats uri /haproxy-stats stats auth admin:**************** option httpchk frontend http-in bind 16.9.13.39:80 maxconn 100000 acl is_l1 hdr_end(host) -i l1.mydomain.com acl is_l2 hdr_end(host) -i l2.mydomain.com acl is_l3 hdr_end(host) -i l3.mydomain.com acl is_l0 hdr_end(host) -i mydomain.com use_backend lora1 if is_l1 use_backend lora2 if is_l2 use_backend lora3 if is_l3 use_backend lora0 if is_l0 default_backend lora0 backend lora0 balance roundrobin option forwardfor except 127.0.0.1 # stunnel already adds the header server s0 127.0.0.1:5000 check inter 60000 backend lora1 balance source option forwardfor except 127.0.0.1 # stunnel already adds the header server s1 127.0.0.1:5001 check inter 60000 backend lora2 balance source option forwardfor except 127.0.0.1 # stunnel already adds the header server s2 127.0.0.1:5002 check inter 60000 backend lora3 balance source option forwardfor except 127.0.0.1 # stunnel already adds the header server s3 127.0.0.1:5003 check inter 60000 

这一切工作正常。 除了大约0.2%的客户。 有时当请求来到l1,l2或l3时。 例如:

 http://l3.mydomain.com/something 

而且由于某种原因,HAProxy与域名不匹配,而是使用默认的后端。

我已经在我的应用程序中设置了日志logging,并且报告接收端的主机名实际上是“l3.mydomain.com”。 这是我的应用程序收到的标题:

 host: 'l3.mydomain.com', 'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4', accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', referer: 'http://mydomain.com/menu/2034414/e2e1abb5500ed51391d6351b1cf03695', 'accept-encoding': 'gzip,deflate,sdch', 'accept-language': 'en-US,en;q=0.8', 'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'x-proxy-id': '1407537728', 'x-forwarded-for': '10.201.4.168', via: '1.1 10.201.255.254 (Mikrotik HttpProxy)' 

问题:

我正确使用hdr_end(),并有匹配可能会失败的一些特殊情况?

是否有某种方式loggingHAProxy收到的实际HTTP读取器,但只有在没有匹配的情况下使用default_backend规则?

问题是,远程用户的代理看到,mydomain.com和l3.mydomain.com都是相同的IP地址,并试图重用连接。 添加http-server-close选项解决了这个问题。