如何在HAproxy的ACL列表中匹配通配符主机?

我在我的haproxy.conf中有以下几行:

acl valid_domains hdr(Host) -i mysite.com images.mysite.com docs.mysite.com admin.mysite.com redirect location http://mysite.com/invalid_domain if !valid_domains 

我如何匹配任何子域名?

我试过了:

acl valid_domains hdr(Host) -i *.mysite.com

和:

acl valid_domains hdr(Host) -i [az]+.mysite.com

…但都没有工作。

谢谢

我觉得hdr_sub更适合你的需要。 我正在使用hdr_end一段时间,但它遇到了以下问题:

端口80的请求通常得到端口剥离,所以主机头看起来像“example.com”,但是如果你明确要求在一个端口,如example.com:8080,头将有端口,hdr_end将失败检查“example.com”。

hdr_sub会做一个子string匹配,这似乎更适合你(和我)。

这两种解决scheme都有我不喜欢的讨厌的东西。 依赖顺序评估结果。

例如(我的情况看起来像这样在前端)

 acl is_dbadmin hdr_sub(host) -i dbadmin.example.com 

要求在端口8080将是这样的:

 Jul 9 02:48:40 localhost haproxy[8]: 192.168.1.1:55870 [09/Jul/2015:02:48:40.865] http-in example/s1 1/0/0/20/110 200 330722 - - ---- 0/0/0/0/0 0/0 {**example.com:8080**||http://example.com:} {Apache/2.4.10 (Debia

|} "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1"

那里的港口80可能是这样的

 Jul 9 02:48:40 localhost haproxy[8]: 192.168.1.1:55870 [09/Jul/2015:02:48:40.865] http-in example/s1 1/0/0/20/110 200 330722 - - ---- 0/0/0/0/0 0/0 {example.com||***http://example.com***:} {Apache/2.4.10 (Debia

|} "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1"

hdr_end是你在找什么。 尝试这个:

 acl valid_domains hdr_end(host) -i mysite.com redirect location http://mysite.com/invalid_domain if !valid_domains