HAProxy: API en el mismo subdominio que la interfaz

HAProxy: API en el mismo subdominio que la interfaz

Tengo tal configuración en mi haproxy.cfgarchivo:

    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.comse entregarán archivos usando nginxa menos que pathcomience con /api( subdomain.mydomain.com/api/*), entonces debería usar mi apibackend.

Ahora, usando la configuración actual, cuando reinicio haproxyel servicio, hay dos escenarios:

  1. Voy a subdomain.mydomain.com- está sirviendo nginx-frontend- genial. Luego voy al subdomain.mydomain.com/api- 404 ( nginxse usó).

  2. Voy a subdomain.mydomain.com/apiservir api, genial. Luego voy a subdomain.mydomain.com- 404 ( apise 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 nginxla 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.cfgel 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_begen 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

información relacionada