HAProxy: API no mesmo subdomínio do frontend

1

Eu tenho essa configuração no meu arquivo haproxy.cfg :

    acl is_api url_beg -i /api
    acl is_frontend hdr(host) -i subdomain.mydomain.com

    use_backend api if is_api
    use_backend nginx-frontend if is_frontend

Meu objetivo:

Atingir subdomain.mydomain.com servirá arquivos usando nginx , a menos que o path comece com /api ( subdomain.mydomain.com/api/* ) - então, deve usar meu backend api .

Agora, usando a configuração atual, quando eu reiniciar o haproxy service, há dois cenários:

  1. Eu vou para subdomain.mydomain.com - está veiculando nginx-frontend - ótimo. Então eu vou para subdomain.mydomain.com/api - 404 ( nginx foi usado).

  2. Eu vou para subdomain.mydomain.com/api que está veiculando api - ótimo. Então eu vou para subdomain.mydomain.com - 404 (o api backend foi usado).

Então, dependendo da ordem da minha primeira visita em qualquer página, todas as solicitações para o meu subdomínio são atribuídas a um backend ...

Sou totalmente novato, me desculpe se essa é uma pergunta estúpida.

Alguma ajuda?

    
por andrusieczko 13.06.2015 / 13:32

2 respostas

0

OK, descobri uma maneira ... mas em nginx configuration ( /etc/nginx/sites-enabled/default ):

server {
    listen 8080 default_server;
    listen [::]:8080 default_server ipv6only=on;

    server_name subdomain.mydomain.com;
    location /api {
            proxy_pass http://127.0.0.1:4001;
    }

    location / {
            try_files $uri $uri/ =404;
    }
}

e no arquivo haproxy.cfg :

backend nginx
    server nginx-1 127.0.0.1:8080 check

frontend all
    bind *:80
    mode http

    acl is_frontend hdr(host) -i subdomain.mydomain.com
    use_backend nginx if is_frontend

    # other frontends...

Se alguém pudesse comentar se é uma boa abordagem, eu ficaria grato!

    
por 13.06.2015 / 13:49
0

Dá 404 por causa de url_beg . Isso usa o URL completo e não a parte final após o domínio, ou seja, ele recebe "http..." em http://subdomain.mydomain.com/api

url_beg Returns true when the URL begins with one of the strings. This can be used to check whether a URL begins with a slash or with a protocol scheme.

Use path_beg em vez disso.

frontend fe
  ...
  acl is_api path_beg -i /api
  acl is_frontend hdr(host) -i subdomain.mydomain.com

  use_backend api if is_api
  use_backend nginx-frontend if is_frontend !is_api
    
por 12.04.2016 / 06:12

Tags