我正在尝试将Traefik设置为一个简单的Node.js微服务的反向代理,该微服务将由Angular前端调用,该前端将转换为javascript,css和html并在nginx上运行。现在,我正在尝试让Node.js在端口3000上进行内部侦听,并在外部traefik的暴露端点上可访问。
我可以访问仪表板和whoami示例服务,但不能访问Node.js微服务中定义的endpopints。我得到与PathPrefix匹配的端点的“错误网关”。如果我尝试到达与模式不匹配的端点,则会得到404“找不到页面”,因此我认为我正确设置了PathPrefix,只是没有服务设置和/或后端与前端配对。
当在Traefik外部调用时,我的微服务可以正常工作。我已经从Node.js脚本中删除了证书和SSL / TLS的处理,以便Traefik可以处理该部分。我对此部分也很有信心。
如果您访问“ /”,我的Node.js会显示“ Hello,world”,如果您进入/ v1 / api / authorize,则我的Node.js会进行实际工作。同样,仅当作为独立的node.js应用程序运行时,否则作为docker服务堆栈中的服务。
我想念什么?是什么导致“错误的网关”错误?我觉得这将是一个简单的解决方案,对于Traefik来说,这似乎是一个简单的用例。
我正在使用Node.js 10和Traefik 2.1.0。
version: "3.3"
services:
reverse-proxy:
image: "traefik:latest"
command:
- --entrypoints.web.address=:80
- --entrypoints.web-secure.address=:443
- --providers.docker=true
- --api.insecure
- --providers.file.directory=/configuration/
- --providers.file.watch=true
- --log.level=DEBUG
ports:
- "80:80"
- "8080:8080"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "/home/cliffm/dev/traefik/configuration/:/configuration/"
auth-micro-svc:
image: "auth-micro-svc:latest"
labels:
- traefik.port=3000
- "traefik.http.routers.my-app.rule=Path(`/`)"
- "traefik.http.routers.my-app.rule=PathPrefix(`/v1/api/`)"
- "traefik.http.routers.my-app.tls=true"
whoami:
image: containous/whoami:latest
redis:
image: redis:latest
ports:
- "6379:6379"
答案 0 :(得分:1)
晚了聚会,但至少在这里您要覆盖配置:
- "traefik.http.routers.my-app.rule=Path(`/`)"
- "traefik.http.routers.my-app.rule=PathPrefix(`/v1/api/`)"
第二行覆盖底行,因此第一行实际上被忽略。即使它同时适用于这两个规则,它们也是唯一的。 Path(/
)的意思是显式/不带后缀,因此/ bla将不匹配,/ v1 / api也不会匹配,即使它与第二个规则匹配也是如此
对于多个规则,您可以使用这种方法:
- "traefik.http.routers.my-app.rule=Host(`subdomain.yourdomain.com`) && PathPrefix(`/v1/api`)"