如何解决使用 Traefik 的 Mailcow 反向代理没有路由到正确的 Nginx 服务
我正在尝试遵循 mailcow dockerized 上的 community documentation 并且我使用 Traefik 作为我的负载均衡器。
我已成功获得 SSL 证书,并且在我检查日志时 certdump
正常工作。
我遇到的问题是当我访问 nginx-mailcow
时 mail.example.com
容器没有收到请求。我的 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.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
网络(公共)运行,您应该使用 Mailcow 容器中的 traefik
网络,因为您希望通过 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。