
Eu tenho essa configuração em meu haproxy.cfg
arquivo:
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 gol:
Bater subdomain.mydomain.com
servirá arquivos usando, nginx
a menos que path
comece com /api
( subdomain.mydomain.com/api/*
) - então ele deve usar meu api
back-end.
Agora, usando a configuração atual, quando reinicio haproxy
o serviço, existem dois cenários:
Eu vou
subdomain.mydomain.com
- está servindonginx-frontend
- ótimo. Depois vou parasubdomain.mydomain.com/api
-404 (nginx
foi usado).Eu vou
subdomain.mydomain.com/api
servirapi
- ótimo. Então vou parasubdomain.mydomain.com
-404 (oapi
backend foi usado).
Portanto, dependendo da ordem da minha primeira visita em qualquer página, todas as solicitações ao meu subdomínio são atribuídas a qualquer um dos backends...
Sou totalmente novato, desculpe se essa é uma pergunta estúpida.
Qualquer ajuda?
Responder1
OK, descobri um jeito... mas na nginx
configuração ( /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 haproxy.cfg
arquivo:
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, ficaria grato!
Responder2
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 "http..."
entrahttp://subdomain.mydomain.com/api
url_beg Retorna verdadeiro quando o URL começa com uma das strings. Isto pode ser usado para verificar se um URL começa com uma barra ou com um esquema de protocolo.
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