www.example.com 指向我的后端服务器的公共IP。我已经在后端服务器上设置了指向不同服务的 NAT 转发规则,因此我想使用 https://www.example.com:/health 被接受,然后重定向到端口 /health
我尝试过使用中间件,但到目前为止还没有成功。
.env:
REGEX_PATTERN=^(https://[^/]+):([^/]+)/?(.*)$
REGEX_REPLACEMENT=$${1}/$${3}:\$${2}`
docker-compose.yml:
services:
whoami:
image: "traefik/whoami"
container_name: "simple-service"
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami-rule1.rule=Host(`www.example.com`)"
- "traefik.http.routers.whoami-rule1.entrypoints=websecure"
- "traefik.http.routers.whoami-rule1.tls.certresolver=myresolver"
- "traefik.http.routers.whoami-rule1.middlewares=whoami-rule1-port-redirect"
- "traefik.http.middlewares.whoami-rule1-port-redirect.redirectregex.regex=${REGEX_PATTERN}"
- "traefik.http.middlewares.whoami-rule1-port-redirect.redirectregex.replacement=${REGEX_REPLACEMENT}"
- "traefik.http.middlewares.whoami-rule1-port-redirect.redirectregex.permanent=true"
容器构建成功,但 SSL 检查不起作用。
我可以成功卷曲http://www.example.com:7001/health,但是https://www.example.com:7001/health不起作用。我的想法是,端口 7001 可能因不同的容器而异,我想创建一个容器来执行简单的重定向,而不是为每个端口创建一个容器,因为有很多服务(和端口)
我尝试为每个端口创建一个单独的容器,但这会创建太多容器来管理,并且无法在将来对 SSL 问题进行一站式检查。
如果您还分享了 traefik 配置的其余部分(您设置
entrypoints
的位置),那就太好了。您实际上正在运行一个 traefik
容器吗?
一般来说,traefik 会监听分配给入口点的端口。通常这意味着 1 个用于
http
(80),1 个用于 https
("websecure", 443)。
使用反向代理的“美妙之处”在于,您可以使用“一个”端口来接受所有流量,然后根据设置的规则(例如通过匹配主机地址)将其转发到适当的容器。
我不知道端口7001
来自哪里。这是分配给您的
websecure
入口点的端口吗? AFAIK,whoami
容器侦听端口 80
。我还认为不可能通过重定向正则表达式更改端口(同样,这应该不是必需的,因为我们使用的是反向代理)。