es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Traefik: aplicar middleware al enrutador excepto una ruta específica

Utilizo un middleware de lista blanca de IP para filtrar el acceso de mi aplicación web solo a algunas IPs y funciona bien.

Sin embargo, quiero desproteger una ruta específica para hacerla pública (la ruta es /api/transaction).

Por ahora, tengo (en mi docker-compose.yml):

varnish:
labels:
– “traefik.http.routers.api_varnish.rule=Host(api.local, api)”
– “traefik.http.routers.api_varnish.tls=true”
– “traefik.http.routers.api_varnish.middlewares=https-redirect@file”
– “traefik.http.routers.api_varnish.middlewares=https-whitelist@file”
– “traefik.http.services.api_varnish.loadbalancer.server.port=80”

Esta parte funciona, luego añadí:

# Middleware abierto para llamadas de IPN de pago

– “traefik.http.routers.api_varnish_transaction.rule=(Host(api.local, api) && PathPrefix(/api/transaction))”
– “traefik.http.routers.api_varnish_transaction.tls=true”
– “traefik.http.routers.api_varnish_transaction.priority=2”
– “traefik.http.routers.api_varnish_transaction.middlewares=https-redirect@file”

He duplicado las líneas, pero no apliqué el middleware https-whitelist@file al nuevo host.

No funciona, no puedo encontrar la sintaxis correcta o estar seguro si puedo hacerlo. La documentación es bastante pobre.

¿Alguna idea?

Tags:  

Answer

  1. Avatar for davy.ai

    Dado que deseas desproteger una ruta específica y hacerla pública, debes eliminar el middleware https-whitelist@file del nuevo host.

    Para hacer esto, puedes utilizar la sección traefik.http.middlewares en tu archivo docker-compose.yml para definir tus middlewares por separado y luego aplicarlos a tus hosts mediante etiquetas.

    Primero, define tus middlewares:

    traefik:
      http:
        middlewares:
          https-redirect:
            redirectScheme:
              scheme: https
          whitelist:
            ipWhiteList:
              sourceRange:
                - 192.168.0.1/32
                - 10.0.0.1/32
    

    A continuación, aplica tus middlewares a los hosts:

    varnish:
      labels:
        - "traefik.http.routers.api_varnish.rule=Host(`api.local`, `api`)"
        - "traefik.http.routers.api_varnish.tls=true"
        - "traefik.http.routers.api_varnish.middlewares=https-redirect,whitelist"
        - "traefik.http.services.api_varnish.loadbalancer.server.port=80"
    
        # Middleware abierto para llamadas IPN de pagos
        - "traefik.http.routers.api_varnish_transaction.rule=(Host(`api.local`, `api`) && PathPrefix(`/api/transaction`))"
        - "traefik.http.routers.api_varnish_transaction.tls=true"
        - "traefik.http.routers.api_varnish_transaction.priority=2"
        - "traefik.http.routers.api_varnish_transaction.middlewares=https-redirect"
    

    En este ejemplo, el middleware whitelist está incluido en el enrutador api_varnish, pero no en el enrutador api_varnish_transaction. Solo el middleware https-redirect está incluido en ambos enrutadores.

    Al definir tus middlewares por separado y luego aplicarlos a tus hosts, puedes personalizar fácilmente el middleware para cada host y evitar la duplicación de código.

Comments are closed.