如何用Traefik强制www

时间:2018-09-18 13:21:41

标签: .htaccess docker traefik

我一直在学习Traefik用作在服务器上的Docker容器中运行的各种Wordpress网站的反向代理。目前,我在同一个IP上使用Wp设置了2个域,并且运行正常。

我在将域重定向到www时遇到问题,因此现在在http://example.com上它只是显示'Index of',我试图通过htaccess强制进行重定向,但这无法正常工作,因此Im假设有我必须做的事情在Traefik设置中?

这是我的docker-compose.yml文件,但我只在此处包括重要部分:

services:
  reverse-proxy:
    image: traefik # The official Traefik docker image
    command: --api --docker # Enables the web UI and tells Træfik to listen to docker
    ports:
      - "80:80"     # The HTTP port
      - "8080:8080" # The Web UI (enabled by --api)
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
      - ./traefik.toml:/traefik.toml

wp-web2:
    container_name: cowork-wp
    image: wordpress:latest
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql-db-cowork
      WORDPRESS_DB_USER: foo
      WORDPRESS_DB_NAME: foo
      WORDPRESS_DB_PASSWORD: passwd123
    depends_on:
      - mysql-db-cowork
    labels:
      - "traefik.frontend.rule=Host:example.com"
      - "traefik.frontend.rule=Host:www.example.com"
      - "traefik.frontend.forcehost:www.example.com"
      #- "traefik.frontend.rule=Path: /"
    volumes:
      - ./src-tdm:/var/www/html

正如您在标签中看到的那样,我尝试了不同的主机以及'forcehost',但这些主机似乎都没有起作用。

这是toml文件:

defaultEntryPoints = ["http"]

[entryPoints]
  [entryPoints.http]
  address = ":80"

#Define Docker Backend Configuration
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "example.com"
watch = true
exposedByDefault = true

最后这是我从.htaccess中强制执行的www重写规则

#Force www:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com$1 [L,R=301,NC]

1 个答案:

答案 0 :(得分:0)

仔细检查文档显示,需要在前端Host:参数中用逗号定义不同的域,例如:

- "traefik.frontend.rule=Host:www.example.com, example.com"