Jak dopasować hosta do symboli wieloznacznych na listach ACL w HAproxy?


Mój haproxy.conf zawiera następujące wiersze:
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

Jak dopasować dowolną subdomenę?
Próbowałem:
       acl valid_domains hdr(Host) -i *.mysite.com
i:
       acl valid_domains hdr(Host) -i [a-z]+.mysite.com
... Ale ani jedno, ani drugie nie działały.
dzięki
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

czuję to

hdr_sub
http://cbonte.github.io/haprox ... r_sub
lepiej dla Twoich potrzeb. Używam hdr_end od jakiegoś czasu, ale napotkałem następujący problem:
żądania z portem 80 zwykle usuwają ten port, więc nagłówek hosta wygląda jak „example.com”, ale jeśli jawnie zażądałeś portu, na przykład example.com:8080, nagłówek pokaże port, a hdr_end nie przejdzie kontroli „example. com ”.
hdr_sub dokona dopasowania podciągów, co wydaje się bardziej odpowiednie dla ciebie (i dla mnie).
W każdej decyzji jest coś nieprzyjemnego, którego mi się nie podoba. Ocena wyników zależna od zamówienia.
na przykład (moje warunki wyglądają tak w interfejsie)
acl is_dbadmin hdr_sub(host) -i dbadmin.example.com

Żądanie portu 8080 będzie wyglądać następująco:
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"

gdzie port 80 prawdopodobnie mógłby być taki
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"
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

           hdr_end
http://cbonte.github.com/hapro ... r_end
to jest to, czego szukasz. Spróbuj tego:
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
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Są chwile, kiedy trzeba to wyjaśnić, na przykład podczas obsługi przekierowań SSL z użyciem symboli wieloznacznych z wieloma poziomami subdomen.
Pasujący koniec (
         hdr_end
lub
         -m end
) lub podciąg (
         hdr_sub
lub
         -m sub
) może mieć niezamierzone skutki uboczne dopasowania większej ilości, niż się spodziewasz. W wielu przypadkach może to nie mieć większego znaczenia, ponieważ nie ma ruchu z tych domen na serwer, ale to nie znaczy, że jest to technicznie poprawne rozwiązanie.
Odkryłem, że użycie wyrażenia regularnego jest najlepszym sposobem na jawne dopasowanie. Na przykład, jeśli chcesz tylko dopasować
         *.example.org
nie pasuje
         sub.domain.example.org
:
acl valid_domains hdr(host) -m reg -i ^[^\.]+\.example\.org$

Jeśli chcesz również obsłużyć (dowolne) niestandardowe porty, możesz to nieco rozszerzyć:
acl valid_domains hdr(host) -m reg -i ^[^\.]+\.example\.org(:[0-9]+)?$

Nad

będzie pasować

:
  •            test1.example.org         
  •            test2.example.org:8080         

i

będzie

nie

konformizm

:
  •            example.org         
  •            two.subs.example.org         
  •            myexample.org         
  •            test.myexample.org         
  •            test.example.org.other.com         

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się