【问题标题】:Allow both http and https with Traefik on Docker在 Docker 上允许使用 Traefik 的 http 和 https
【发布时间】:2021-11-17 15:58:21
【问题描述】:

我在我的 VPS 中使用 Traefik 将流量路由到我的网站,经过数小时的折腾,我终于设法使用 Le's Encrypt 与 https 一起工作。

现在,我需要做的一件事是能够通过普通的http 访问我的网站,因为这是旧浏览器的一个爱好项目,我添加tls 的唯一原因是因为 Firefox 不喜欢我的网站没有它。

问题是,在我当前的配置下,我可以通过https 正常访问我的网站,但是当我尝试使用纯http 时,我收到404 错误。

这是我在docker-compose 上的配置:

version: "3"
services:
  traefik:
    image: "traefik:v2.5"
    container_name: "traefik"
    command:
      #- "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.teeresolver.acme.tlschallenge=true"
      - "--certificatesresolvers.teeresolver.acme.email=me@gmail.com"
      - "--certificatesresolvers.teeresolver.acme.storage=/letsencrypt/acme.json"
    ports:
      - "443:443"
      - "80:80"
      - "8080:8080"
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    networks:
      - mywebsite
  # [...]
  mywebsite:
    image: my-web-site/site
    build:
      context: ~/mywebsite-runner/_work/my-web-site-php/my-web-site-php
      dockerfile: Dockerfile
    volumes:
      - ./tee-downloads:/var/www/build/downloads
      - ./tee-contents:/var/www/build/contents
    ports:
      - "0.0.0.0:8001:80"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.themywebsite.rule=Host(`mywebsite.com`, `www.mywebsite.com`)"
      - "traefik.http.routers.themywebsite.entrypoints=websecure,web"
      - "traefik.http.routers.themywebsite.tls.certresolver=teeresolver"
    networks:
      - mywebsite

networks:
  mywebsite:

我已经找了几个小时的解决方案,但我在谷歌上唯一能找到的是将 http 重定向到 https 的配置,我做不到。

有人知道怎么做吗?

提前感谢您的帮助。

【问题讨论】:

  • 您是否尝试过访问 traefik 仪表板?
  • 还没有。我需要设置一个子域,但我还没有花时间去做。

标签: docker http ssl https traefik


【解决方案1】:

在 traefik 中,每个 router 定义了一组策略以根据规则和入口点应用。

如果你想要 2 个策略,一个用于 http,一个用于 https,你需要定义 2 个 traefik routers

  mywebsite:
    ...
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.themywebsite.entrypoints=websecure"
      - "traefik.http.routers.themywebsite.tls.certresolver=teeresolver"
      - "traefik.http.routers.themywebsite.rule=Host(`mywebsite.com`, `www.mywebsite.com`)"
      - "traefik.http.routers.httpwebsite.entrypoints=web"
      - "traefik.http.routers.httpwebsite.rule=Host(`mywebsite.com`, `www.mywebsite.com`)"
  • 一个叫themywebsite
  • 另一个叫httpwebsite

因此,您没有为 httpwebsite 路由器使用 certresolver。

【讨论】:

  • 没问题,我也一直在苦苦挣扎。
猜你喜欢
  • 1970-01-01
  • 2015-02-06
  • 2018-11-28
  • 1970-01-01
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 2017-10-11
相关资源
最近更新 更多