Traefik/Docker:使用端口作为前端规则(而不是路径或子域)

Traefik/Docker: Using ports as a frontend rule (rather than paths or subdomains)

我正在使用 docker-compose 将 Traefik 设置为 Docker 容器中几个服务 运行ning 的反向代理。我已经让它工作了,但我想做的是并且不确定如何配置它,以便通过不同的前端 https port(而不是不同的子域名或路径前缀)。

这是我为 Traefik 和第一个服务编写的 docker-compose 文件:

version: '3.2'

services:
  traefik:
    image: traefik:1.6-alpine
    container_name: traefik
    command:
      - --logLevel=INFO
      - --defaultentrypoints=http,https
      - --entryPoints=Name:http Address::5099 Redirect.EntryPoint:https
      - --entryPoints=Name:https Address::5098 TLS:/cert/certificate.crt,/cert/private.key
      - --docker
      - --docker.exposedbydefault=false
      - --docker.domain=example.com
    ports:
      - target: 5099
        published: 5099
        protocol: tcp
        mode: host
      - target: 5098
        published: 5098
        protocol: tcp
        mode: host
    volumes:
      - ./cert:/cert
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always

  firefox-syncserver:
    image: crazymax/firefox-syncserver:latest
    container_name: traefik-firefoxsync
    volumes:
      - ./firefoxsync:/data
    labels:
      - traefik.enable=true
      - traefik.backend=firefox-syncserver
      - traefik.port=5000
      - traefik.frontend.rule=Host:example.com
    environment:
      - <...config for firefoxsync...>
    restart: always

有了这个,我可以通过 https://example.com:5098 访问服务,一切都很好。现在让我们尝试添加第二个服务:

  traefik-manictime:
    image: manictime/manictimeserver:latest
    container_name: traefik-manictime
    volumes:
      - ./manictime:/app/Data
    labels:
      - traefik.enable=true
      - traefik.backend=manictime
      - traefik.port=8080
      - traefik.frontend.rule=PathPrefix:/manictime
    restart: always

这可以通过 https://example.com:5098/manictime 访问。然而,问题是服务本身不能在虚拟目录中 运行 (也就是它需要在其域的顶层 - 没有 /manictime 子目录)。虽然我知道我可以使用子域而不是路径前缀来区分服务,但我更愿意使用端口(其中一个原因是我在家里的 NAS 上托管它,这不是静态 IP,所以我正在使用 DDNS 来保持顶级域指向正确的位置;必须为每个子域执行此操作很麻烦。

所以问题是:我能以某种方式配置 Traefik 以便

https://example.com:5098 -> https 前端到服务 1

https://example.com:6000 -> https 前端服务 2

?

您需要在新端口上创建新的 TLS 入口点,并将新入口点添加到默认列表(如果您希望新端口上的所有 TLS 服务都可用),或者手动将新入口点添加到服务2 使用 traefik.frontend.entryPoints 标签。