Comment comparer l'hôte avec des panneaux génériques dans les listes ACL dans HAproxy?

Dans mon haproxy.conf Il y a les lignes suivantes:

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

Comment comparer un sous-domaine?

J'ai essayé:


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

et:


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

... Mais ni l'un ni l'autre n'a fonctionné.

remercier
Invité:

Blanche

Confirmation de:

Je sens ça
http://cbonte.github.io/haprox ... r_sub
Mieux pour vos besoins. J'ai utilisé du temps hdr_end, Mais face au problème suivant:

Demandes avec un port 80 Supprimez généralement le port, de sorte que l'en-tête de l'hôte ressemble à «example.com», Mais si vous avez clairement demandé au port, par exemple example.com:8080, Le titre indiquera le port et hdr_end Vérification d'erreur complète "example.com".

hdr_sub comparera la sous-chaîne, qui semble plus appropriée pour vous (et pour moi).

Dans n'importe quelle solution, il y a une chose désagréable que je n'aime pas. Commander une évaluation dépendante des résultats.

par exemple (Mes conditions ressemblent à l'interface)

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

Demande de port 8080 Sera:

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**||[url=http://example.com:]http://example.com:[/url]} {Apache/2.4.10 (Debia||||} "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1"

où comme port 80, probablement peut-être

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||***[url=http://example.com]http://example.com[/url]***:} {Apache/2.4.10 (Debia||||} "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1"

Christine

Confirmation de:

http://cbonte.github.com/hapro ... r_end
C'est ce que vous recherchez. Essaye ça:

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

Christine

Confirmation de:

Il y a des cas où vous devez l'indiquer clairement, par exemple, lors du traitement des redirections pour SSL Avec des signes génériques avec plusieurs niveaux de sous-domaines.

L'extrémité correspondante (

hdr_end

ou

-m end

) ou sous-chaîne (

hdr_sub

ou

-m sub

) Peut avoir des effets secondaires non intentionnels de la coïncidence supérieure à ce que vous attendez. Dans de nombreux cas, cela peut ne pas avoir beaucoup d'importance, car vous n'avez pas de trafic de ces domaines entrant dans le serveur, mais cela ne signifie pas que c'est techniquement la bonne décision.

J'ai constaté que l'utilisation d'une expression régulière est la meilleure façon de comparer explicite. Par exemple, si vous voulez comparer uniquement

*.example.org

sans conformité

sub.domain.example.org

:

acl valid_domains hdr(host) -m reg -i ^[^\.]+\.example\.org$

Si vous voulez aussi traiter (Tout) Ports non standard, il peut être légèrement étendu:

acl valid_domains hdr(host) -m reg -i ^[^\.]+\.example\.org(:[0-9]+)?$

Plus de

va correspondre

:


test1.example.org


test2.example.org:8080

et

volonté

ne pas

conformité

:


example.org


two.subs.example.org


myexample.org


test.myexample.org


test.example.org.other.com

Pour répondre aux questions, connectez-vous ou registre