【问题标题】:Trying to set up Traefik as a reverse proxy for node.js and nginx尝试将 Traefik 设置为 node.js 和 nginx 的反向代理
【发布时间】:2019-12-17 03:23:43
【问题描述】:

我正在尝试将 Traefik 设置为一个简单的 Node.js 微服务的反向代理,以便由 Angular 前端调用,该前端将被转换为 javascript、css 和 html 并在 nginx 上运行。现在,我正在尝试让 Node.js 在端口 3000 上进行内部侦听,并且可以从外部 traefik 访问暴露的端点。

我可以访问仪表板和 whoami 示例服务,但不能访问我的 Node.js 微服务中定义的端点。对于与 PathPrefix 匹配的端点,我得到“错误网关”。如果我尝试访问与模式不匹配的端点,我会收到 404“找不到页面”,所以我认为我的 PathPrefix 设置正确,我只是没有设置服务和/或后端配合前端。

在 Traefik 之外调用时,我的微服务运行良好。我已经从 Node.js 脚本中剥离了对证书和 SSL/TLS 的处理,以便 Traefik 可以处理该部分。我非常有信心这部分也能正常工作。

如果您访问“/”,我的 Node.js 会打印“Hello, world”,如果您访问 /v1/api/authorize,则可以执行真正的工作。同样,仅当作为独立的 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"

【问题讨论】:

    标签: node.js docker docker-compose traefik


    【解决方案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`)"
    

    【讨论】:

      猜你喜欢
      • 2016-07-05
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2011-08-28
      • 1970-01-01
      相关资源
      最近更新 更多