Я чувствую, что 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"
acl valid_domains hdr(host) -i mysite.com
+acl valid_domains hdr_end(host) -i .mysite.com
или просто использовалacl valid_domains hdr_dom(host) -i mysite.com
В некоторых случаях вам необходимо четко указать это, например, обрабатывать перенаправления для подстановочного SSL-кода с несколькими уровнями поддоменов.
Соответствие конца (
hdr_end
или-m end
) или подстроки (hdr_sub
или-m sub
) может иметь непреднамеренные побочные эффекты соответствия больше, чем вы ожидаете. Во многих случаях это может не иметь большого значения, поскольку у вас нет трафика для этих доменов, приходящих на сервер, но это не означает, что это технически правильное решение.Использование регулярного выражения - лучший способ, который я нашел, чтобы сделать явное соответствие. Например, если вы хотите совпадать только
*.example.org
без совпаденияsub.domain.example.org
:Если вы также хотите обрабатывать (любые) нестандартные порты, это можно немного расширить:
Выше будет соответствовать :
test1.example.org
test2.example.org:8080
и будет не соответствовать :
example.org
two.subs.example.org
myexample.org
test.myexample.org
test.example.org.other.com
источник