
Tengo tal configuración en mi haproxy.cfg
archivo:
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
Mi meta:
Al presionar, subdomain.mydomain.com
se entregarán archivos usando nginx
a menos que path
comience con /api
( subdomain.mydomain.com/api/*
), entonces debería usar mi api
backend.
Ahora, usando la configuración actual, cuando reinicio haproxy
el servicio, hay dos escenarios:
Voy a
subdomain.mydomain.com
- está sirviendonginx-frontend
- genial. Luego voy alsubdomain.mydomain.com/api
- 404 (nginx
se usó).Voy a
subdomain.mydomain.com/api
servirapi
, genial. Luego voy asubdomain.mydomain.com
- 404 (api
se usó el backend).
Entonces, dependiendo del orden de mi primera visita a cualquiera de las páginas, todas las solicitudes a mi subdominio se asignan a cualquiera de los servidores...
Soy un novato total, lo siento si es una pregunta estúpida.
¿Alguna ayuda?
Respuesta1
Bien, descubrí una manera... pero en nginx
la configuración ( /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;
}
}
y en haproxy.cfg
el archivo:
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...
Si alguien pudiera comentar si es un buen enfoque, ¡se lo agradecería!
Respuesta2
Da 404 debido a url_beg
. Esto utiliza la URL completa y no la parte final después del dominio, es decir, "http..."
ingresahttp://subdomain.mydomain.com/api
url_beg Devuelve verdadero cuando la URL comienza con una de las cadenas. Esto se puede utilizar para comprobar si una URL comienza con una barra o con un esquema de protocolo.
Úselo path_beg
en su lugar.
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