It isn't really the use case we need. Is it possible to open an issue somewhere with this idea ? I didn't see a bug tracker for haproxy.
Regards. -- Ludovic Gasc (GMLudo) Lead Developer Architect at ALLOcloud https://be.linkedin.com/in/ludovicgasc 2017-09-18 2:21 GMT+02:00 Igor Cicimov <ig...@encompasscorporation.com>: > On Mon, Sep 18, 2017 at 7:11 AM, Ludovic Gasc <gml...@gmail.com> wrote: > >> 2017-09-17 11:16 GMT+02:00 Igor Cicimov <ig...@encompasscorporation.com>: >> >>> In 1.8 haproxy takes all records returned by the dns resolver into >>> account where is in 1.7 only the first one in the list. That's the >>> difference I was referring to in my previous comment. Having this in mind >>> your setup might not work as you expect in case when your service has more >>> than one endpoint. >>> >> >> Indeed, it doesn't help me. >> >> >>> Regarding your specific example, what exactly is not working? Haproxy >>> will perform dns resolution on startup and my guess would be it throws an >>> error since %[hdr(host)] at that point is empty. >>> >> >> Exactly. >> No idea to avoid that. >> > > Try something like this, creating separate backend per service: > > frontend fe_web > ... > use_backend %[req.hdr(host),lower,map_dom(/etc/haproxy/domains.map,bk_ > unknown_domain)] > > backend bk_svc_1 > server svc1 service1.service.local:8888 resolvers dns check inter 1000 > init-addr last,libc,127.0.0.1 > > backend bk_svc_2 > server svc2 service2.service.local:8888 resolvers dns check inter 1000 > init-addr last,libc,127.0.0.1 > . > . > . > backend bk_svc_n > server svcn servicen.service.local:8888 resolvers dns check inter 1000 > init-addr last,libc,127.0.0.1 > > backend bk_unknown_domain > <what_ever_here> > > > and have in your /etc/haproxy/domains.map map file: > > service1.domain.com bk_svc_1 > service2.domain.com bk_svc_2 > ... > servicen.domain.com bk_svc_n > > > It is not that dynamic though as in the Nginx example you linked to since > you have to maintain the map file and insert new backend per service but > nothing that cant be solved with some CM tool if needed. Maybe even avoid > the map file if you prefer it that way and have the backend named as the > Host header: > > frontend > use_backend %[req.hdr(host)] > default_backend bk_unknown_domain > > backend service1.domain.com > backend service2.domain.com > ... > backend bk_unknown_domain > > > Igor >