Hello guys,
I tried to handle 401 or 403 errors from my middleware to display a custom error page.
My service for the custom pages works well. (ex: http://domain.com/not-exists will return my custom 404 page).
But, when I add a middleware for BasicAuth or IpWhitelist or both, I got the default error (401 Unauthorized or Forbidden).
I followed this guide and here to perform the nginx error pages server.
My version of Traefik is 2.5.5 running in a Docker Swarm.
My error page nginx service
nginx-errors-pages:
image: nginx:latest
volumes:
- ./traefik-errors-pages/html:/usr/share/nginx/html
- ./traefik-errors-pages/nginx/default.conf:/etc/nginx/conf.d/default.conf
networks:
- traefik
deploy:
placement:
constraints:
- "node.role == worker"
labels:
- "traefik.enable=true"
- "traefik.http.routers.error-router.rule=HostRegexp(`{host:.+}`)"
- "traefik.http.routers.error-router.priority=1"
- "traefik.http.routers.error-router.entrypoints=web"
- "traefik.http.routers.error-router.middlewares=error-pages-ratelimit,error-pages-middleware"
- "traefik.http.middlewares.error-pages-middleware.errors.status=400-599"
- "traefik.http.middlewares.error-pages-middleware.errors.service=error-pages-service"
- "traefik.http.middlewares.error-pages-middleware.errors.query=/{status}.html"
- "traefik.http.middlewares.error-pages-ratelimit.ratelimit.average=100"
- "traefik.http.middlewares.error-pages-ratelimit.ratelimit.burst=50"
- "traefik.http.services.error-pages-service.loadbalancer.server.port=80"
My service without error custom
nginx:
image: nginx:alpine
volumes:
- ./www/:/var/www/html
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
networks:
- traefik
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == worker
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.http.services.backend.loadbalancer.server.port=80"
- "traefik.http.services.backend.loadbalancer.server.scheme=http"
- "traefik.http.routers.backend.entrypoints=web"
- "traefik.http.routers.backend.priority=10"
- "traefik.http.routers.backend.rule=PathPrefix(`/backend`)"
- "traefik.http.routers.backend.middlewares=backend_ipwhitelist,backend_auth,error-pages-middleware"
# If I change the order to check if my error pages middleware works, I got a 404 page --> that's correct
# - "traefik.http.routers.backend.middlewares=error-pages-middleware,backend_ipwhitelist,backend_auth"
# IP set to anything to get a forbidden error
- "traefik.http.middlewares.backend_ipwhitelist.ipwhitelist.sourcerange=0.0.0.0"
- "traefik.http.middlewares.backend_auth.basicauth.users=user:pass"
It's like BasicAuth and IpWhitelist return error pages without going to next middleware.
Do you know if it's possible to handle these errors?
Many thanks for your help!
Merry X-Mas and Take care!