使用没有子域的域名导致路由失败
Using a domain name without a subdomain causes routing to fail
我正在尝试使用 traefik 创建一个简单的应用程序来处理路由和 SSL,但是当我想使用 'example.com' 而不是 'subdomain.example.com' 时,我 运行 遇到了问题
如果我尝试包含前端规则仅为 'example.com' 的服务,唯一有效的规则是 'monitor.example.com'。 'api.example.com' 将不起作用,returns 将返回 404。如果我注释掉 'example.com' 的前端规则,那么 'api.example.com' 将再次起作用。但是,无论如何,'monitor.example.com' 都能正常工作。此外,无论如何,'example.com' 总是 returns 404。
这是我的 docker-compose 文件:
version: '3'
services:
reverse-proxy:
image: traefik
restart: always
command: --docker
ports:
- 80:80
- 443:443
networks:
- web
labels:
- "traefik.frontend.rule=Host:monitor.example.com"
- "traefik.port=8080"
- "traefik.enable=true"
- "traefik.docker.network=web"
- "traefik.backend=traefik"
environment:
- CLOUDFLARE_EMAIL=###
- CLOUDFLARE_API_KEY=###
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/project/traefik/traefik.toml:/traefik.toml
- /home/project/traefik/acme.json:/acme.json
container_name: traefik
api:
image: api
expose:
- 5080
restart: always
networks:
- web
container_name: api
labels:
- "traefik.frontend.rule=Host:api.example.com"
- "traefik.enable=true"
- "traefik.docker.network=web"
- "traefik.port=5080"
- "traefik.backend=api"
app:
image: app
restart: always
networks:
- web
container_name: app
labels:
- "traefik.frontend.rule=Host:example.com"
- "traefik.enable=true"
- "traefik.docker.network=web"
- "traefik.backend=app"
- "traefik.port=80"
networks:
web:
external: true
这是我的 traefik 配置:
defaultEntryPoints = ["https", "http"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[entryPoints.trdash]
address = ":8080"
[entryPoints.trdash.auth]
[entryPoints.trdash.auth.basic]
users = [
"admin:###",
]
[api]
entryPoint = "trdash"
[acme]
email = "###"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
onDemand = false
[[acme.domains]]
main = "example.com"
[[acme.domains]]
main = "*.example.com"
[acme.dnsChallenge]
provider = "cloudflare"
任何帮助将不胜感激,谢谢!
编辑:
好的,我似乎已经通过禁用我在 Cloudflare 上使用的域上的 'orange cloud' 解决了我自己的问题。此外,我必须删除 traefik.toml 文件中的 http 到 https 重定向规则。我不明白为什么这是个问题,所以我打算把这个问题悬而未决。这似乎真的否定了 Cloudflare 提供的大部分价值。
事实证明,问题是在没有启用后端 SSL 的情况下启用了 Cloudflare 代理(橙色云)。只要我在服务器上有 SSL 证书(我通过 Let's Encrypt 做到这一点),我就可以将 Cloudflare SSL 转换为 'Full (strict)',看起来路由现在工作正常。
感谢 Traefik Slack 上的 Daniel Tomcej 帮助我找到这个答案。
我正在尝试使用 traefik 创建一个简单的应用程序来处理路由和 SSL,但是当我想使用 'example.com' 而不是 'subdomain.example.com' 时,我 运行 遇到了问题
如果我尝试包含前端规则仅为 'example.com' 的服务,唯一有效的规则是 'monitor.example.com'。 'api.example.com' 将不起作用,returns 将返回 404。如果我注释掉 'example.com' 的前端规则,那么 'api.example.com' 将再次起作用。但是,无论如何,'monitor.example.com' 都能正常工作。此外,无论如何,'example.com' 总是 returns 404。
这是我的 docker-compose 文件:
version: '3'
services:
reverse-proxy:
image: traefik
restart: always
command: --docker
ports:
- 80:80
- 443:443
networks:
- web
labels:
- "traefik.frontend.rule=Host:monitor.example.com"
- "traefik.port=8080"
- "traefik.enable=true"
- "traefik.docker.network=web"
- "traefik.backend=traefik"
environment:
- CLOUDFLARE_EMAIL=###
- CLOUDFLARE_API_KEY=###
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/project/traefik/traefik.toml:/traefik.toml
- /home/project/traefik/acme.json:/acme.json
container_name: traefik
api:
image: api
expose:
- 5080
restart: always
networks:
- web
container_name: api
labels:
- "traefik.frontend.rule=Host:api.example.com"
- "traefik.enable=true"
- "traefik.docker.network=web"
- "traefik.port=5080"
- "traefik.backend=api"
app:
image: app
restart: always
networks:
- web
container_name: app
labels:
- "traefik.frontend.rule=Host:example.com"
- "traefik.enable=true"
- "traefik.docker.network=web"
- "traefik.backend=app"
- "traefik.port=80"
networks:
web:
external: true
这是我的 traefik 配置:
defaultEntryPoints = ["https", "http"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[entryPoints.trdash]
address = ":8080"
[entryPoints.trdash.auth]
[entryPoints.trdash.auth.basic]
users = [
"admin:###",
]
[api]
entryPoint = "trdash"
[acme]
email = "###"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
onDemand = false
[[acme.domains]]
main = "example.com"
[[acme.domains]]
main = "*.example.com"
[acme.dnsChallenge]
provider = "cloudflare"
任何帮助将不胜感激,谢谢!
编辑: 好的,我似乎已经通过禁用我在 Cloudflare 上使用的域上的 'orange cloud' 解决了我自己的问题。此外,我必须删除 traefik.toml 文件中的 http 到 https 重定向规则。我不明白为什么这是个问题,所以我打算把这个问题悬而未决。这似乎真的否定了 Cloudflare 提供的大部分价值。
事实证明,问题是在没有启用后端 SSL 的情况下启用了 Cloudflare 代理(橙色云)。只要我在服务器上有 SSL 证书(我通过 Let's Encrypt 做到这一点),我就可以将 Cloudflare SSL 转换为 'Full (strict)',看起来路由现在工作正常。
感谢 Traefik Slack 上的 Daniel Tomcej 帮助我找到这个答案。