Используя haproxy-1.5, у меня есть следующая частичная конфигурация:
acl is_api hdr(host) -i api.example.com
acl is_app hdr(host) -i app.example.com
К сожалению, это не соответствует запросу, который выглядит так:
GET / HTTP/1.1
Host: api.example.com:80
Насколько я могу судить, мне нужно сделать:
acl is_api hdr(host) -i api.example.com
acl is_api hdr(host) -i api.example.com:80
acl is_app hdr(host) -i app.example.com
acl is_app hdr(host) -i app.example.com:80
УГХ. НЕТ! НЕНАВИДЕТЬ!
Есть ли способ сделать это лучше? Могу я просто сказать haproxy игнорировать порт в заголовке хоста?
Вы можете заставить это работать, проверив hdr_dom (https://code.google.com/p/haproxy-docs/wiki/MatchingLayer7) вместо hdr:
acl is_api hdr_dom(host) -i api.example.com
acl is_app hdr_dom(host) -i app.example.com
Просто будьте осторожны, потому что я считаю, что это также будет соответствовать таким вещам, как «otherstuff.api.example.com».