Я использую библиотеку 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