Nowe posty

Autor Wątek: Haproxy - default backend  (Przeczytany 6192 razy)

Linuis

  • Gość
Haproxy - default backend
« dnia: 2014-02-20, 16:00:39 »
Mam problem z haproxy, konkretnie z konfiguracją, tzn. nie działa w mojej konfiguracji default_backend:
defaults
    log global
    mode http
    option dontlognull
    retries 3
    option redispatch
    maxconn 200
    contimeout 500
    clitimeout 500
    srvtimeout 500

frontend ft_http
        bind :80
        mode http

        acl is_example_http hdr_end(host) -i example.pl
        acl is_oneexample_http hdr_end(host) -i one.example.pl
        use_backend bk_http_example if  is_example_http
        use_backend bk_http_oneexample if  is_oneexample_http
        default_backend bk_http_default

backend bk_http_example
        mode http
        balance roundrobin
        cookie ROUTEID insert indirect nocache
        option forwardfor
        option httpclose
        default-server inter 1s
        server web1 192.168.1.1:80 cookie web1 check id 1
        server web2 192.168.1.2:80 cookie web2   check id 2
        server backup 192.168.1.15:8080  check id 3 backup

backend bk_http_oneexample
        mode http
        balance roundrobin
        cookie ROUTEID insert indirect nocache
        option forwardfor
        option httpclose
        default-server inter 1s
        server web5 192.168.1.5:80 cookie web5 check id 1
        server web6 192.168.1.6:80 cookie web6   check id 2
        server backup 192.168.1.15:8080  check id 3 backup

backend bk_http_default
        mode http
        option forwardfor
        option httpclose
        server dafault 192.168.1.15:8080
i teraz jeśli wpisujemy inna subdomenę (np. inna.example.pl), aniżeli znajduje się w konfiguracji haproxy, powinna przekierować mnie na backend default, a tak się nie dzieje i kieruje mnie tak jakby na stronę example.pl


Czy ktoś może coś podpowiedzieć co w takim układzie robię źle, że to nie chce zadziałać?
Dodam tylko że zadziała, jeśli w konfiguracji zrobie z www:
acl is_example_http hdr_end(host) -i www.example.pl
wówczas nie przekierowuje mnie na żadną subdomenę, czy też domenę, lecz na serwer default- czary mary?

darkdancer

  • Gość
Haproxy - default backend
« Odpowiedź #1 dnia: 2014-02-21, 10:50:24 »
Cytat: HAProxy
hdr_end
hdr_end(header)
  Returns true when one of the headers ends with one of the strings. See "hdr"
  for more information on header matching. Use the shdr_end() variant for
  response headers sent by the server.
Po polskiemu to będzie - jeśli nagłówek kończy się (inna.example.pl tak jakby kończy się na example.pl) zwraca true czyli ustawia is_example_httpd a dalej masz use_backend bk_http_example if is_example_http więc nie dziwota, że tam pcha Twojego requesta. Tak na logikę rzecz biorąc, bo mam słabe doświadczenia z HAProxy.

Linuis

  • Gość
Haproxy - default backend
« Odpowiedź #2 dnia: 2014-02-25, 14:20:50 »
Niestety darkdancer ale dalej to nie chce działać, a już sporo się z tym męczę i kombinuję...

darkdancer

  • Gość
Haproxy - default backend
« Odpowiedź #3 dnia: 2014-02-26, 10:03:06 »
Cytat: Linuis
Niestety darkdancer ale dalej to nie chce działać, a już sporo się z tym męczę i kombinuję...
Co nie chce działać i co poprawiłeś? Trochę więcej informacji jeśli chcesz uzyskać pomoc.

Linuis

  • Gość
Haproxy - default backend
« Odpowiedź #4 dnia: 2014-02-26, 14:31:17 »
Jeśli zrobiłem acl'ki, wedle tej dokumentacji, czyli dodałem string:
acl is_example_http hdr_end(host)  -i example.pl
i nadal jesli wpiszemy something.example.pl nie trafię na serwer defaultowy lecz na backend example, czyli przekieruje mnie na domenę example.pl

darkdancer

  • Gość
Haproxy - default backend
« Odpowiedź #5 dnia: 2014-02-27, 00:12:43 »
Panie... ale to tak właśnie ma działać. Z jakiej paki chcesz trafić na defaultowy backend skoro hdr_end(host) -i example.pl przechwytuje Ci wszystko *.example.pl? Jak wpiszesz dla przykładu test.example.com (przy założeniu, że *.example.com wskazuje na IP haproxy oczywiście) to wtedy dostaniesz to co siedzi w defaultowym backendzie. Zastanów się najpierw co chcesz osiągnąć.

Linuis

  • Gość
Haproxy - default backend
« Odpowiedź #6 dnia: 2014-02-27, 09:27:21 »
Wg mnie sam się w tym momencie darkdancer zakręciłęś, a mianowicie jeśli damy:
Cytat: darkdancer
dla przykładu test.example.com (przy założeniu, że *.example.com wskazuje na IP haproxy oczywiście) to wtedy dostaniesz to co siedzi w defaultowym backendzie
to również nie dostanę się na defaultowy backend, bo jaka jest różnica czy wpiszę cos.example.com czy test.example.com?

Twój sposób/pomysł zadziałałby, jeśli utworzyłbym platformę testową i wówczas przy wpisaniu np. test-cos.example.com trafię na defaultowy backend

Muszę zrobić z www.example.com, aby trafiać na defaultowy backend, innego wyjścia nie ma.

darkdancer

  • Gość
Haproxy - default backend
« Odpowiedź #7 dnia: 2014-02-28, 08:21:11 »
Cytat: Linuis
to również nie dostanę się na defaultowy backend, bo jaka jest różnica czy wpiszę cos.example.com czy test.example.com
Różnica jest w .com a Twoja domena w configu to .pl - nie wiem czy to dostrzegasz. Jeśli po moich komentarzach i cytacie z dokumentacji jeszcze nie byłeś w stanie się domyślić, zakładając, że www.example.pl i example.pl mają tylko iść na bk_http_example:
acl is_example_http hdr_beg(host) -i example.pl hdr_beg(host) -i www.example.pl
acl is_oneexample_http hdr_beg(host) -i one.example.pl
use_backend bk_http_example if  is_example_http
use_backend bk_http_oneexample if  is_oneexample_http
default_backend bk_http_default

Linuis

  • Gość
Haproxy - default backend
« Odpowiedź #8 dnia: 2014-02-28, 09:41:44 »
Wczoraj raz jeszcze zacząłem czytać od nowa dokumentację haproxy i zauważyłem, gdzie popełniałem błąd, a mianowicie cały czas używałem hdr_end(host) zamiast hdr_beg(host), który to ogranicza się tylko do danej aclki,
a tak się namęczyłem, a błąd był prozaiczny :)

Ale dziękuję darkdancer za naprowadzanie w celu rozwiązania problemu.