Traefik (Docker) не устанавливает заголовки X-Forwarded- *? - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь запустить Apache в Docker, за обратным прокси-сервером Traefik для https.Все работает, за исключением того, что когда я получаю доступ к URL-адресу папки без косой черты, Apache перенаправляет меня на не-https (то есть https://www.example.com/folder -> http://www.example.com/folder/). Это вызвано Apache mod_dir DirectorySlash, как описано здесь & здесь . Решение состоит в том, чтобы использовать правило перезаписи, которое срабатывает до DirectorySlash, например:

# Redirect to HTTPS before Apache mod_dir DirectorySlash redirect to HTTP
RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteCond %{LA-U:REQUEST_FILENAME} -d
RewriteRule ^/(.*[^/])$ https://%{HTTP_HOST}/$1/ [R=301,L,QSA]

Однако, проблема в Traefikкажется, не устанавливает X-Forwarded- * заголовки . Вот снимок экрана заголовков, которые я получаю: enter image description here

Вот ярлыки, которые я используюв моем файле Apache docker-compose:

  labels:
    - traefik.enable=true
    - traefik.port=80
    - traefik.frontend.rule=PathPrefix:/web  #Apache is accessible under https://example.com/web/

Я пробовал различные комбинации меток, но независимо от того, что я делаю, заголовки x-forwarded- * всегда, кажется, отсутствуют. Например ( ref , ref ):

- "traefik.frontend.headers.SSLProxyHeaders=X-Forwarded-Proto:https"
- "traefik.frontend.headers.SSLRedirect=true"

Я даже пытался заставить Traefik добавлять свои собственные пользовательские заголовки и не могу их отобразить ( ref ):

- "traefik.https.middlewares.testHeader.Headers.CustomRequestHeaders.X-Script-Name=test"

... Однако, просто чтобы убедить себя, что я не сумасшедший, и это фактически работает за Traefik, & Traefik может добавить заголовки, которые я вижу, это работает и заставляет заголовок X-Frame-Options появляться в Firefox:

- traefik.frontend.headers.frameDeny=true

Итак, в заключение, вопрос заключается в следующем: почему Traefik не устанавливает заголовки x-forwarded- * (которые я затем могу использовать в моих Apache RewriteRules) - и как я могу заставить это сделать это?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Для тех, кто находит это и задается вопросом, моя проблема была двоякой:

1) Заголовки X-Forwarded- * не отображаются в браузере.Вы можете увидеть их на сервере с помощью функции phpinfo () или с помощью дампа переменной $ _SERVER:

http://take.ms/cbhtM

2) Причина, по которой перенаправления не былиРабота (для исправления проблемы DirectorySlash) связана с тем, что в дополнение к перечисленным выше RewriteRules ваш htaccess должен включать RewriteOptions AllowNoSlash .Из документации Apache :

По умолчанию, mod_rewrite будет игнорировать URL-адреса, которые сопоставляются с каталогом на диске, но без косой черты, в ожидании, что модуль mod_dir выдастклиент с перенаправлением на канонический URL с косой чертой.[...] параметр AllowNoSlash может быть включен, чтобы гарантировать, что правила перезаписи больше не игнорируются.Эта опция позволяет применять правила перезаписи в файлах .htaccess, которые соответствуют каталогу, без косой черты, если это необходимо.

0 голосов
/ 15 апреля 2019

Вы пробовали

traefik.frontend.passHostHeader: true

Если это возможно, я бы рекомендовал отсортировать перенаправление http на https по traefik:

[entryPoints]
    [entryPoints.http]
    address = ":80"
      [entryPoints.http.redirect]
      entryPoint = "https"

    [entryPoints.https]
    address = ":443"
      [entryPoints.https.tls]
...