Перенаправить URL на другой URL с помощью регулярного выражения с Traefik - PullRequest
0 голосов
/ 08 января 2020

Я хочу перенаправить один URL на другой URL через traefik.

Я использую docker для этой конфигурации, а ниже находится мой docker -compose.yml файл

version: '3'

services:
  reverse-proxy:
    # The official v2.0 Traefik docker image
    image: containous/whoami
    container_name: "whoami_cont"
    # Enables the web UI and tells Traefik to listen to docker
    ports:
      # The HTTP port
      - 80:80
      # The Web UI (enabled by --api.insecure=true)
      - 8080:8080
    labels:
      - traefik.http.middlewares.test-replacepathregex.replacepathregex.regex=^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]
      - traefik.http.middlewares.test-replacepathregex.replacepathregex.replacement=http://localhost:8081/4

тогда я выполняю команду docker -compose успешно. Затем я выберу любой URL, соответствующий шаблону регулярных выражений, но URL не перенаправляет на другой URL - http://localhost: 8081/4 согласно конфигурации. Я использую traefik версии 2.0

Пожалуйста, дайте мне знать, если какая-либо конфигурация отсутствует.

1 Ответ

3 голосов
/ 08 января 2020

По официальному примеру , похоже, что в вашей конфигурации отсутствует фактический экземпляр Traefik:

  traefik:
    image: "traefik:v2.0.0-rc3"
    container_name: "traefik"
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

После добавления Traefik в ваш docker -компонентный файл и определения связующее ПО , вы должны подключить ваше промежуточное ПО к маршрутизатору:

      - "traefik.http.routers.whoami.middlewares=test-replacepathregex"
      - "traefik.http.middlewares.test-replacepathregex.replacepathregex.regex=^/foo/(.*)"
      - "traefik.http.middlewares.test-replacepathregex.replacepathregex.replacement=/bar/$$1"

Полный и рабочий (но упрощенный) пример замены /foo/123 на /bar/123:

version: "3.3"

services:
  traefik:
    image: "traefik:v2.0.0-rc3"
    container_name: "traefik"
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  whoami:
    image: "containous/whoami"
    container_name: "simple-service"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`localhost`)"
      - "traefik.http.routers.whoami.entrypoints=web"
      - "traefik.http.routers.whoami.middlewares=test-replacepathregex"
      - "traefik.http.middlewares.test-replacepathregex.replacepathregex.regex=^/foo/(.*)"
      - "traefik.http.middlewares.test-replacepathregex.replacepathregex.replacement=/bar/$$1"
...