我为特定域区域和子域配置了 Traefik。我需要将来自不同域名的请求重定向到另一个IP地址(另一台物理机)。我不知道如何在 Traefik 中实现这个。
traefik:
image: "traefik:latest"
container_name: "traefik"
restart: "always"
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.network=main_net"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.httpchallenge=true"
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
- "[email protected]"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- "/volumes/letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.traefik-compress.compress=true"
- "traefik.http.routers.traefik.rule=Host(`traefik.domain1.local`)"
- "traefik.http.services.traefik.loadbalancer.server.port=8080"
- "traefik.http.routers.traefik.entrypoints=websecure"
- "traefik.http.routers.traefik.tls.certresolver=myresolver"
- "traefik.http.routers.traefik.service=api@internal"
当前计算机上的所有子域都在当前配置下工作。但我需要将请求从
*.domain2.tech
重定向到共享网络上的另一台物理机。
我建议您查看 traefiks 文档。特别考虑路由器和服务。
有多个有用的路由器规则,它们就像匹配器一样来匹配您的请求。这些匹配器之一称为“HostRegexp”。顾名思义,它将解析给定的正则表达式。 为了使用“domain2.tech”的任何子域,您可能需要使用“{subdomain:[a-z0-9-]+}.domain2.tech”
为了将流量传递到给定主机,您可以使用服务的负载均衡器的“url”参数。
两者一起,您可能想要以下内容:
- traefik.http.routers.domain2.entrypoints=websecure
- traefik.http.routers.domain2.rule=HostRegexp(`{subdomain:[a-z0-9-]+}.domain2.tech`)
- traefik.http.routers.domain2.service=domain2-service
- traefik.http.services.domain2-service.loadbalancer.server.url="http://192.168.0.1" (or any ip)
作为一个小提示,我将使用 .yaml 文件来创建静态 traefik 路由,而不是使用标签。它更具可读性并且可以更好地组织。有关更多信息,请参阅“文件提供程序示例”。