这是我的案例,我有一个包含 2 个 docker 容器的环境:
在构建 JS 应用程序时,容器“尚不可用”。因此 traefik 将显示 502 bad gateway 或 404 not found standard page。
有没有办法裁剪这些页面? 为了显示更加人性化的页面?
我已经挖掘了 traefik 文档,但没有成功
Traefik 提供错误页面中间件
https://doc.traefik.io/traefik/middlewares/http/errorpages/
错误页面应由另一个 traefik 服务提供,这是通过使用以下标签定义的:
# Dynamic Custom Error Page for 5XX Status Code
labels:
- "traefik.http.middlewares.test-errors.errors.status=500-599"
- "traefik.http.middlewares.test-errors.errors.service=serviceError"
- "traefik.http.middlewares.test-errors.errors.query=/{status}.html"
这是一个基本示例,可能会帮助您实现您想要的
docker-compose.yaml
services:
errors:
image: nginx:alpine
volumes:
- ./errors.conf:/etc/nginx/conf.d/errors.conf
- ./500.html:/usr/share/nginx/html/500.html
labels:
- "traefik.enable=true"
- "traefik.http.services.errors-service.loadbalancer.server.port=80"
- "traefik.http.routers.errors-router.rule=Host(`error.localhost`)"
- "traefik.http.routers.errors-router.entryPoints=web"
- "traefik.http.middlewares.errors-middleware.errors.status=500"
- "traefik.http.middlewares.errors-middleware.errors.service=errors-service"
- "traefik.http.middlewares.errors-middleware.errors.query=/{status}.html"
backend:
image: nginx:alpine
volumes:
- ./backend.conf:/etc/nginx/conf.d/backend.conf
labels:
- "traefik.enable=true"
- "traefik.http.services.backend-service.loadbalancer.server.port=80"
- "traefik.http.routers.backend-router.rule=Host(`test.localhost`)"
- "traefik.http.routers.backend-router.entryPoints=web"
- "traefik.http.routers.backend-router.middlewares=errors-middleware@docker"
traefik:
image: traefik:2.4
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 80:80
command:
- --accessLog=true
- --api=true
- --log.level=DEBUG
- --entrypoints.web.address=:80
- --providers.docker=true
- --providers.docker.exposedByDefault=false
- --providers.docker.network=default
labels:
- "traefik.enable=true"
- "traefik.http.services.traefik-service.loadBalancer.server.port=8080"
- "traefik.http.routers.traefik-router.rule=Host(`traefik.localhost`)"
- "traefik.http.routers.traefik-router.entryPoints=web"
- "traefik.http.routers.traefik-router.service=api@internal"
errors.conf
server {
listen 80 default_server;
root /usr/share/nginx/html;
location / {
try_files $uri =500;
}
}
backend.conf
server {
listen 80 default_server;
root /usr/share/nginx/html;
location / {
return 500;
}
}
500.html
<h1>This is broken - HTTP 500 SERVER ERROR</h1>