Je pense que hdr_sub est mieux adapté à vos besoins. J'utilisais hdr_end depuis un certain temps, mais cela se heurte au problème suivant:
les demandes avec le port 80 obtiennent généralement le port supprimé afin que l'en-tête de l'hôte ressemble à "example.com", mais si vous demandiez explicitement sur un port, comme example.com:8080, l'en-tête aura le port, et hdr_end échouera le vérifiez "example.com".
hdr_sub fera une correspondance de sous-chaîne, ce qui semble être un meilleur choix pour vous (et moi).
L'une ou l'autre solution a toujours une mauvaise chose que je n'aime pas. Évaluation des résultats en fonction de l'ordre.
par exemple (mes conditions ressemblent à ceci sur le frontend)
acl is_dbadmin hdr_sub(host) -i dbadmin.example.com
Demander sur le port 8080 serait comme ceci:
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"
où le port 80 pourrait probablement être comme ça
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
, ou j'utiliserais simplementacl valid_domains hdr_dom(host) -i mysite.com
Il y a des cas où vous devez être explicite à ce sujet, comme la gestion des redirections pour SSL générique avec plusieurs niveaux de sous-domaines.
Faire correspondre la fin (
hdr_end
ou-m end
) ou la sous-chaîne (hdr_sub
ou-m sub
) peut avoir des effets secondaires involontaires de faire correspondre plus que vous ne le pensez. Dans de nombreux cas, cela peut ne pas vraiment avoir d'importance, car vous n'avez pas de trafic pour ces domaines vers le serveur, mais cela ne signifie pas que c'est la solution techniquement correcte.L'utilisation d'une expression régulière est le meilleur moyen que j'ai trouvé pour faire une correspondance explicite. Par exemple, si vous souhaitez uniquement faire correspondre
*.example.org
sans faire correspondresub.domain.example.org
:Si vous souhaitez également gérer (tous) les ports non standard, cela peut être légèrement étendu:
Ce qui précède correspondra :
test1.example.org
test2.example.org:8080
et ne pas correspondre :
example.org
two.subs.example.org
myexample.org
test.myexample.org
test.example.org.other.com
la source