【问题标题】:Redirect from non-www to www with Traefik 2使用 Traefik 2 从非 www 重定向到 www
【发布时间】:2022-08-03 03:48:45
【问题描述】:

我想从非www重定向到www。

我想做的事:

在浏览器中输入:

https://domainname.com

获得:

https://www.domainname.com

我写的:

version: \"3.9\"

services:
  traefik:
    build: ./traefik
    image: image-traefik-eb:v.1.0
    container_name: container-traefik-eb
    command:
      - --log.level=INFO
      - --log.filePath=/data-log/traefik.log
      - --log.format=json
      - --accesslog=true
      - --api.insecure
      - --api.dashboard
      - --providers.docker
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
      - --entrypoints.web.http.redirections.entryPoint.to=websecure
      - --entrypoints.web.http.redirections.entrypoint.scheme=https
      - --entrypoints.websecure.address=:443
      - --entrypoints.websecure.http.tls=true
      - --entrypoints.websecure.http.tls.certresolver=leresolver
      - --certificatesresolvers.leresolver.acme.tlsChallenge=true
      - --certificatesresolvers.leresolver.acme.email=#########@gmail.com
      - --certificatesresolvers.leresolver.acme.storage=/letsencrypt/acme.json
      - --entrypoints.websecure.http.middlewares.redirect-non-www-to-www.redirectregex.permanent=true
      - --entrypoints.websecure.http.middlewares.redirect-non-www-to-www.redirectregex.regex=\"^https?://(?:www\\\\.)?(.+)\"
      - --entrypoints.websecure.http.middlewares.redirect-non-www-to-www.redirectregex.replacement=\"https://www.${1}\"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./volumes/data-letsencrypt/:/letsencrypt
      - ./volumes/data-log/:/data-log/
    restart: always
    ports:
      - 80:80
      - 443:443
    networks:
      - eb
      - traefik-network
      
  php:
    build: ./php-apache
    image: image-php-apache-eb:v.1.0
    labels:
      traefik.enable: \'true\'
      traefik.http.services.php.loadbalancer.server.port: 80
      traefik.http.services.php.loadbalancer.server.scheme: http
      traefik.http.routers.php.rule: Host(`www.#########.ml`,`#########.ml`)
      traefik.http.routers.php.middlewares: redirect-non-www-to-www
    volumes:
      - ./volumes/data-php:/var/www/html
    restart: always
    depends_on:
      - traefik
    networks:
      - eb

networks:
  eb:
    internal: true
  traefik-network:

Dockerfile

FROM php:8.1-apache
EXPOSE 80

Dockerfile

FROM traefik:v2.8.0

我从中获得代码的来源:

https://medium.com/geekculture/how-to-redirect-from-non-www-to-www-with-traefik-659cb7197449

我得到什么:

ERROR: Invalid interpolation format for \"command\" option in service \"traefik\": \"--entrypoints.websecure.http.middlewares.redirect-non-www-to-www.redirectregex.replacement=\"https://www.${1}\"\"
ubuntu-22-04-lts@webserver:~/www.domainname.com$
  • 在 PHP 服务中,您有“traefik.http.routers.training2.middlewares: redirect-non-www-to-www@ file\”。帖子中的那个@文件在那里,因为他的 traefik\ 的重定向配置是静态文件的一部分。所以你肯定需要在那里删除@文件。尝试在没有@文件的情况下使用它,看看结果如何。
  • 标签: traefik.enable: \'true\' traefik.http.routers.training.rule: Host(www.***.ml) traefik.http.routers.training.middlewares: redirect-non-www-to-www
  • *** 需要重新启动系统 *** 上次登录:2022 年 7 月 25 日星期一 18:41:13 来自°°°°° ubuntu-22-04-lts@webserver:~$ cd /home/ubuntu-22-04-lts /www.***.ml docker-compose up -d --force-recreate 错误:服务 \"traefik\" 中 \"command\" 选项的插值格式无效:\"--entrypoints.websecure.http.middlewares .redirect-non-www-to-www.redirectregex.replacement=\"${1}\"\" ubuntu-22-04-lts@webserver:~/www.***.ml$
  • 我也试过这段代码:
  • 标签: traefik.enable: \'true\' traefik.http.routers.training.rule: Host(www.########.ml,########.ml) traefik.http.middlewares.test-redirectregex.redirectregex.regex: ^http:// ########.ml/(.*) traefik.http.middlewares.test-redirectregex.redirectregex.replacement:########.ml/$${1}

标签: docker-compose traefik


【解决方案1】:

我已经获取了您的配置并删除了 HTTPS 配置(所以我只使用 HTTP 进行了测试,因此没有额外的复杂层,只是测试普通的 HTTP 和重定向逻辑)。您需要自行调整和添加 HTTPS,因为我们没有在 Traeifk 中使用任何 HTTPS,所以我无法真正帮助您。

关于你的重定向逻辑,我不得不搬家

traefik.http.middlewares.redirect-non-www-to-www.redirectregex

依赖服务的标签部分的逻辑而不是 traefik 配置以使其工作。我创建了一个名为“my-custom-domain.org”的自定义域,并编辑了我的主机文件,将其指向我的本地开发环境。

最后我归结为工作配置:

version: "3.9"

services:
  traefik:
    image: traefik:v2.8.1
    container_name: container-traefik-eb
    command:
      - --log.level=INFO
      - --log.format=json
      - --accesslog=true
      - --api.insecure
      - --api.dashboard
      - --providers.docker
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always
    ports:
      - 80:80
      - 443:443
    networks:
      - eb
  
  php:
    image: nginx:latest
    labels:
      traefik.enable: 'true'
      traefik.http.services.php.loadbalancer.server.port: 80
      #traefik.http.services.php.loadbalancer.server.scheme: http
      traefik.http.routers.php.rule: Host(`www.my-custom-domain.org`,`my-custom-domain.org`)
      traefik.http.routers.php.service: php
      traefik.http.routers.php.entrypoints: web
      traefik.http.routers.php.middlewares: redirect-non-www-to-www
      traefik.http.middlewares.redirect-non-www-to-www.redirectregex.permanent: true
      traefik.http.middlewares.redirect-non-www-to-www.redirectregex.regex: "^http://my-custom-domain.org/(.*)"
      traefik.http.middlewares.redirect-non-www-to-www.redirectregex.replacement: "http://www.my-custom-domain.org/$${1}"
    restart: always
    depends_on:
      - traefik
    networks:
      - eb

networks:
  eb:
    external: true

我已经在隐身模式下测试了这个配置,它对所有http://my-custom-domain.org -> http://www.my-custom-domain.org 重定向都适用。

我希望你发现它有用并且成功添加了 HTTPS,或者任何其他与 Traefik 一起工作的成员都能够帮助你解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多