[英]Trying to set up Traefik as a reverse proxy for node.js and nginx
我正在嘗試將 Traefik 設置為一個簡單的 Node.js 微服務的反向代理,由 Angular 前端調用,該微服務將被轉換為 javascript、css 和 html 並在 nginx 上運行。 現在,我正在嘗試讓 Node.js 在端口 3000 上進行內部偵聽,並且可以從外部 traefik 的公開端點上訪問。
我可以訪問儀表板和 whoami 示例服務,但不能訪問我的 Node.js 微服務中定義的端點。 對於與 PathPrefix 匹配的端點,我得到“Bad Gateway”。 如果我嘗試訪問與模式不匹配的端點,我會收到 404“找不到頁面”,所以我認為我正確設置了 PathPrefix,我只是沒有設置服務和/或后端與前端配合。
在 Traefik 之外調用時,我的微服務運行良好。 我已經從 Node.js 腳本中去除了對證書和 SSL/TLS 的處理,以便 Traefik 可以處理那部分。 我非常有信心這部分也在工作。
如果您訪問“/”,我的 Node.js 會打印“Hello, world”,如果您訪問 /v1/api/authorize”,它會真正工作。同樣,只有作為獨立的 node.js 應用程序運行,而不是作為服務運行在 docker 服務堆棧中。
我錯過了什么? 是什么導致了“Bad Gateway”錯誤? 我有一種感覺,這將是一個簡單的解決方法,這對於 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"
聚會遲到了,但至少,您在這里覆蓋了配置:
- "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`)"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.