Traefik 的多个域

Multiple domains with Traefik

我是 Traefik 的新手,但正在尝试从 jwilder/nginx-proxy 和 letsencrypt-companion 迁移到 Traefik。 我已经使用这个配置文件设置了 Traefik: traefik.yml

entryPoints:
  web:
    address: :80
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https    
  websecure:
    address: :443

api:
  dashboard: true
  insecure: true

certificatesResolvers:
  le:
    acme:
      email: username@gmail.com
      storage: acme.json
      httpChallenge:
        # used during the challenge
        entryPoint: web

providers:
  docker:
    endpoint: unix:///var/run/docker.sock
    exposedByDefault: false

docker-compose.yml

version: '3'

services:
  traefik:
    image: traefik:v2.2
    restart: always
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    networks:
      - web
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /data/disk1/traefik/traefik.yml:/traefik.yml
      - /data/disk1/traefik/acme.json:/acme.json
    container_name: traefik

在域 #1 上启动一个容器时

docker-compose.yml

version: "3"

services:
  confluence:
    container_name: confluence
    image: atlassian/confluence-server:7.6.2
    volumes:
      - /data/disk1/atlassian/application-data/confluence:/var/atlassian/application-data/confluence
    ports:
      - "8090:8090"
    external_links:
      - postgres:postgres
    environment:
      - CATALINA_CONNECTOR_PROXYNAME=confluence.tld
      - CATALINA_CONNECTOR_PROXYPORT=443
      - CATALINA_CONNECTOR_SCHEME=https
      - CATALINA_CONNECTOR_SECURE=true
      - VIRTUAL_HOST=confluence.tld
      - VIRTUAL_NETWORK=web
      - VIRTUAL_PORT=8090
      - LETSENCRYPT_EMAIL=user@tld
      - LETSENCRYPT_HOST=confluence.tld
    labels:
      - traefik.enable=true
      - traefik.http.routers.confluence.rule=Host(`confluence.tld`)
      - traefik.http.routers.confluence.tls=true
      - traefik.http.routers.confluence.tls.certresolver=le
      - traefik.http.routers.confluence.service=confluence
      - traefik.http.services.confluence.loadbalancer.server.port=8090
    networks:
      - web
    restart: always
networks:
  web:
    external:
      name: web

效果很好。 注意:我暂时保留了jwilder/nginx-proxy的环境变量 当启动另一个具有不同 tld 的容器时,我无法正常工作。

例如 docker-compose.yml

version: "3"

services:
  confluence:
    container_name: myapp
    image: nginx:latest
    volumes:
      - /data/disk1/myapp/www/:/usr/share/nginx/html:ro
      - /data/disk1/myapp/conf/nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "9999:80"
    environment:
      - VIRTUAL_HOST=www.tld2,tld2
      - VIRTUAL_NETWORK=web
      - VIRTUAL_PORT=9999
      - LETSENCRYPT_EMAIL=user@tld2
      - LETSENCRYPT_HOST=www.tld2,tld2
    labels:
      - traefik.enable=true
      - traefik.http.routers.myapp.rule=Host(`tld2`) || Host(`www.tld2`)
      - traefik.http.routers.myapp.tls=true
      - traefik.http.routers.myapp.tls.certresolver=le
      - traefik.http.routers.myapp.service=tld2
      - traefik.http.services.myapp.loadbalancer.server.port=9999
    networks:
      - web
    restart: always
networks:
  web:
    external:
      name: web

它不起作用,但在 Traefik 仪表板中一切正常。 有什么想法吗?

第二个有错误docker-compose.yml:

您将名为 mypp 的路由器定义为使用名为 tld2:

的服务

traefik.http.routers.myapp.service=tld2

但是您的服务名为 myapp:

traefik.http.services.myapp.loadbalancer.server.port=9999

这应该会在 Traefik 的日志中生成有关无法解析服务的错误。

要解决此问题,请配置您的路由器 myapp 以使用服务 myapp:

traefik.http.routers.myapp.service=myapp