我觉得hdr_sub更适合您的需求。我使用hdr_end已有一段时间,但遇到以下问题:
端口为80的请求通常会剥夺该端口,因此主机标头看起来像“ example.com”,但是如果您明确要求端口,例如example.com:8080,则标头将具有该端口,而hdr_end将失败检查“ example.com”。
hdr_sub将进行子字符串匹配,这似乎更适合您(和我)。
两种解决方案仍然有我不喜欢的讨厌的东西。结果的顺序依赖评估。
例如(我的条件在前端看起来像这样)
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"