我希望 traefik 路由到我的 nginx 服务的特定路径。 下面的设置适用于我的开发环境,但不适用于实时环境 环境。
问题是,对于 nginx 服务,它只创建一个前端 路由,通常只是静态的,或者只是媒体。就好像它找到了一个,然后创造了它 然后就不再关心其余的事情。
如果我重新启动容器,那么 traefik 将随机执行其中一条路线 再次,但从来没有像我的开发机器上那样全部 3 个。
docker-compose.yml
version: '3'
services:
db:
image: postgres:latest
webapp:
build:
context: ./src/webapp/
env_file:
- .env
volumes:
- "./resources:/mnt/resources/"
depends_on:
- db
links:
- "db:dbhost"
labels:
- "traefik.backend=webapp"
- "traefik.port=8000"
- "traefik.webapp.entryPoints=https"
- "traefik.webapp.frontend.rule=Host:my.domain.example"
nginx:
build:
context: ./src/nginx/
volumes:
- ./resources:/mnt/resources
labels:
- "traefik.backend=nginx"
- "traefik.port=443"
- "traefik.frontend.entryPoints=https"
- "traefik.static.frontend.rule=Host:my.domain.example;PathPrefix:/static"
- "traefik.media.frontend.rule=Host:my.domain.example;PathPrefix:/media"
- "traefik.sw.frontend.rule=Host:my.domain.example;Path:/service-worker.js"
traefik:
image: traefik:1.6.3
restart: always
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./src/traefik/traefik.toml:/traefik.toml
- ./src/traefik/acme.json:/acme.json
一个单独的问题,但仍然与 traefik 相关:
Traefik 应该获取 main.domain 的 LetsEncrypt 证书,并且这样做了 非常适合该领域。
但它也尝试获取 db 和 traefik 服务的证书。 我如何告诉 traefik 不要获取这些服务的证书?
最佳答案
终于明白了。
对于未生成的前端,我基本上必须为每个前端指定一个后端,然后它们按预期工作。
所以这个:
- "traefik.static.frontend.rule=Host:my.domain.example;PathPrefix:/static"
- "traefik.media.frontend.rule=Host:my.domain.example;PathPrefix:/media"
- "traefik.sw.frontend.rule=Host:my.domain.example;Path:/service-worker.js"
...变成了这样:
- "traefik.static.backend=nginx-static"
- "traefik.static.frontend.rule=Host:my.domain.example;PathPrefix:/static"
- "traefik.media.backend=nginx-media"
- "traefik.media.frontend.rule=Host:my.domain.example;PathPrefix:/media"
- "traefik.sw.backend=nginx-sw"
- "traefik.sw.frontend.rule=Host:my.domain.example;Path:/service-worker.js"
之后一切正常。
关于docker-compose - Traefik docker-compose 仅创建一个前端路由而不是 3 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50875714/