【问题标题】:Mailcow Reverse Proxy using Traefik not routing to the correct Nginx Service使用 Traefik 的 Mailcow 反向代理未路由到正确的 Nginx 服务
【发布时间】:2021-04-25 15:46:06
【问题描述】:

我正在尝试在 mailcow dockerized 上关注community documentation,并且我正在使用 Traefik 作为我的负载均衡器。

我已成功获得 SSL 证书,当我检查日志时,certdump 正在按预期工作。

我遇到的问题是,当我访问 mail.example.com 时,nginx-mailcow 容器没有收到请求。我的 Traefik 日志显示:

level=error msg="entryPoint \"secure\" doesn't exist" routerName=moo@docker entryPointName=secure level=error msg="no valid entryPoint for this router" routerName=moo@docker

我的docker-compose.override.yml 看起来像这样(与社区文档没有太大区别):

version: '2.1' 
  services:
    nginx-mailcow:
      networks:
        traefik:
        web:
      labels:
      - traefik.enable=true
      - traefik.http.routers.moo.rule=Host(`${MAILCOW_HOSTNAME}`)
      - traefik.http.routers.moo.tls=true
      - traefik.http.routers.moo.tls.certresolver=godaddy
      - traefik.http.routers.moo.middlewares=redirect@file
      - traefik.http.routers.moo.service=nginx-mailcow
      - traefik.http.services.moo.loadBalancer.passHostHeader=true
      - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
      - traefik.http.middlewares.https-redirect.headers.customrequestheaders.X-Forwarded-Proto=https
      - traefik.http.routers.moo.middlewares=https-redirect
      - traefik.http.services.moo.loadbalancer.server.port=80
      - traefik.http.routers.moo.entrypoints=secure
      - traefik.docker.network=web
  certdumper:
    image: humenius/traefik-certs-dumper
    container_name: traefik_certdumper
    network_mode: none
    volumes:
    - acme:/traefik:ro
    - ./data/assets/ssl/:/output:rw
    environment:
    - DOMAIN=${MAILCOW_HOSTNAME}    
networks:
  traefik:
    external: true
  web:
    external: true
volumes:
  acme:
    name: "traefik_acme"

谁能看出我做错了什么?

我也尝试过:

labels:
- traefik.enable=true
- traefik.http.routers.moo.rule=Host(`${MAILCOW_HOSTNAME}`)
- traefik.http.routers.moo.tls=true
- traefik.http.routers.moo.tls.certresolver=godaddy
- traefik.http.services.moo.loadbalancer.server.port=80
- traefik.http.routers.moo.entrypoints=secure
- traefik.docker.network=web

这仍然不起作用。

【问题讨论】:

  • 请包含 traefik 容器的配置,尤其是入口点。

标签: docker docker-compose nginx-reverse-proxy traefik traefik-ingress


【解决方案1】:

为服务定义名称时,必须在服务配置中使用相同的名称,如下所示:

  • traefik.http.routers.moo.service=nginx-mailcow
  • traefik.http.services.moonginx-mailcow.loadBalancer.passHostHeader=true

loadBalancer.servers(注意服务器中的 s)没有 port 键,只有 url

  • traefik.http.services.moo.loadbalancer.server.port=80
  • traefik.http.services.nginx-mailcow.loadbalancer.servers.url=['http://nginx-mailcow:80']

但由于您使用的是默认值,因此您可以省略以上所有内容 =)

还有一件事,我不知道您的 Traefik 容器是如何配置的,但如果您的 Traefik 使用定义的 traefik 网络(内部)和 web 网络(公共)运行,您应该使用 @987654326 @network 在您的 Mailcow 容器中,因为您希望通过 Traefik 路由所有外部流量。

  • traefik.docker.network=web
labels:
  - traefik.enable=true
  - traefik.http.routers.moo.rule=Host(`${MAILCOW_HOSTNAME}`)
  - traefik.http.routers.moo.tls=true
  - traefik.http.routers.moo.tls.certresolver=godaddy
  - traefik.http.routers.moo.middlewares=redirect@file
  - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
  - traefik.http.middlewares.https-redirect.headers.customrequestheaders.X-Forwarded-Proto=https
  - traefik.http.routers.moo.middlewares=https-redirect
  - traefik.http.routers.moo.entrypoints=secure
  - traefik.docker.network=traefik

#30daysofstackoverflow

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    相关资源
    最近更新 更多