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
标签。
我正在使用 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
标签。