Почему traefik перенаправляет на серверный порт докера в подкаталогах в контейнере apache2 php? - PullRequest
0 голосов
/ 19 января 2019

Я использую библиотеку PHP 7.0 с поддержкой Apache для размещения моего приложения за traefik.
Этот apache настроен на обслуживание порта 1025 вместо 80, потому что openshift не позволит вам использовать что-либо ниже порта 1024.
Чтобы не пускать людей, я настроил базовую аутентификацию на своем веб-интерфейсе, используя метки docker-compose.

Меня озадачивает следующее поведение:
При использовании браузера (Chrome) http://dev.domain.com/admin запросит учетные данные и перенаправит меня на https://dev.domain.com.
После ввода учетных данных на предыдущем шаге повторное посещение http://dev.domain.com/admin приведет к перенаправлению на dev.domain.com:1025/admin.
Не уверен, поможет ли эта информация, но этого не происходит при просмотре каждой страницы через https: // напрямую.

Я попытался curl, чтобы увидеть, что происходит.
Похоже, что http 301 -направка отправляла мой браузер на внутренний порт apache. Вы можете увидеть результат ниже.

Почему это происходит? Что я могу сделать, чтобы предотвратить это?

Ответ от службы с использованием curl:

curl -v 'https://some:basicauth@dev.domain.com/admin'
*   Trying 1.1.1.1...
* Connected to dev.domain.com (1.1.1.1) port 443 (#0)
* found 148 certificates in /etc/ssl/certs/ca-certificates.crt
* found 592 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
*        server certificate verification OK
*        server certificate status verification SKIPPED
*        common name: dev.domain.com (matched)
*        server certificate expiration date OK
*        server certificate activation date OK
*        certificate public key: RSA
*        certificate version: #3
*        subject: CN=dev.domain.com
*        start date: Sat, 24 Nov 2018 17:51:49 GMT
*        expire date: Fri, 22 Feb 2019 17:51:49 GMT
*        issuer: C=US,O=Let's Encrypt,CN=Let's Encrypt Authority X3
*        compression: NULL
* ALPN, server accepted to use http/1.1
* Server auth using Basic with user 'some'
> GET /admin HTTP/1.1
> Host: dev.domain.com
> Authorization: Basic dhfkjasdhf==
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Content-Length: 325
< Content-Type: text/html; charset=iso-8859-1
< Date: Fri, 18 Jan 2019 18:02:06 GMT
< Location: http://dev.domain.com:1025/admin/
< Server: Apache/2.4.25 (Debian)
<
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://dev.domain.com:1025/admin/">here</a>.</p>
<hr>
<address>Apache/2.4.25 (Debian) Server at dev.domain.com Port 1025</address>
</body></html>
* Connection #0 to host dev.domain.com left intact

Моя traefik.toml конфигурация:

defaultEntryPoints = ["http","https"]
[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
   [entryPoints.https.tls]
[accessLog]

[retry]

[api]
  entryPoint = "traefik"
  dashboard = true
  debug = true
[docker]
  endpoint = "unix:///var/run/docker.sock"
  domain = "domain.com"
  watch = true
  exposedbydefault = false
[acme]
  email = "some@email.com"
  storageFile = "acme.json"
  entryPoint = "https"
  onHostRule = true
[acme.httpChallenge]
  entryPoint = "http"

Мой docker-compose.yml:

version: '2.4'
networks:
  web:
    external: true
services:
  php:
    image: php:7.0.31-apache-stretch
    restart: always
    networks:
      - web
    labels:
     traefik.frontend.auth.basic: some:basicauth
     traefik.docker.network: web
     traefik.enable: true
     traefik.frontend.rule: Host:dev.domain.com
     traefik.port: 1025
...