Трафик с несколькими поддоменами и URL с подпутью - PullRequest
1 голос
/ 20 мая 2019

Настройка: Docker (18.09.6) с одним контейнером Traefik, контейнером Apache, несколькими другими контейнерами (например, портье, работающими за подпутью)
Apache настроен с

- traefik.frontend.rule=Host:${hostname},www.${hostname}

Portainer настроен на

- traefik.frontend.redirect.regex=^(.*)/portainer$$
- traefik.frontend.redirect.replacement=$$1/portainer/
- "traefik.frontend.rule=PathPrefix:/portainer;ReplacePathRegex: ^/portainer/(.*) /$$1"

Контейнер Apache обслуживает URL https://hostname и, например, https://hostname/test
Контейнер Portainer подается через https://hostname/portainer

Настройка работает!

Теперь я хочу расширить субдомены для контейнера Apache, например

- traefik.frontend.rule=Host:${hostname},autoconfig.${hostname},autodiscover.${hostname},mta-sts.${hostname},www.${hostname}

Теперь происходит следующее:
https://hostname работы
https://hostname/test работает
https://autodiscover.hostname работает

https://hostname/portainer перестает работать
Согласно журналам Traefik направляет трафик в контейнер Apache вместо контейнера Portainer

Это может воспроизводиться и связано с несколькими записями веб-интерфейса. Я не нашел пример с более чем 2 правилами веб-интерфейса также попробовал

- traefik.frontend.rule=Host:${hostname},Host:www.${hostname},Host:autoconfig.${hostname}

или

- traefik.frontend.rule=Host:${hostname};Host:www.${hostname};Host:autoconfig.${hostname}

это не сработало ...

1 Ответ

0 голосов
/ 24 мая 2019

Та отвечаю на мой собственный вопрос (спасибо dtomcej, ref URL https://github.com/containous/traefik/issues/4904)

The issue you are encountering is that you have overlapping rules, and you are not defining any priority to determine order of rule execution.

From the documentation (https://docs.traefik.io/basics/#priorities):

By default, routes will be sorted (in descending order) using rules length 

So since you have made the host rule much longer, and it matches, it is the first rule.

You can use the priority label to manually force the match of the portainer path first, before the base host match.

добавлен traefik.frontend.priority = 1 в мой контейнер Apache и traefik.frontend.priority = 2 для всех остальныхконтейнер, содержащий подпуть.

...