Hallo zusammen,
Ich habe einen Apache-Server mit mehreren namensbasierten VirtualHosts.
Die Zuordnung der Anfragen zu dem jeweiligen VirtualHost funktioniert
nicht richtig. Die im Netz verfügbaren Informationen und Forumsbeiträge
habe ich gelesen und berücksichtigt, ich konnte das Problem dennoch
nicht lösen.
Kurze Zusammenfassung: ich habe eine Domain (domain.xyz) und zwei
Subdomains (aaa.domain.xyz und www.domain.xyz).
Auf domain.xyz ist eine Website gehostet, die wie erwartet funktioniert.
Auf aaa.domain.xyz ist ein Reverse Proxy konfiguriert, der auf einen
weiteren Webserver auf localhost umleitet. Funktioniert wie erwartet.
Auf www.domain.xyz ist eine weitere Website konfiguriert, prinzipiell
wie die Hauptdomain (domain.xyz). Dieser VirtualHost macht mir Probleme.
Die DNS-Records sind korrekt eingerichtet (alle verweisen auf die feste
IP-Adresse des Servers).
(P.S. Die Domains heißen natürlich anders, ich habe sie generisch
umbenannt, ohne weitere Auswirkungen - alphabetische Abfolge beim Laden
der Konfigurationsdateien bleibt auch unverändert. Außerdem habe ich
sämtliche Infos zu den HTTP-VirtualHosts auf Port 80 der
Übersichtlichkeit halber weggelassen, weil sie in Bezug auf das
Verhalten der HTTPS-VirtualHosts ohne Bedeutung sein dürften.)
Hier die wesentlichen Konfigurationsdateien:
default server aaa.domain.xyz (/etc/apache2/sites-enabled/aaa.domain.xyz-le-ssl.conf:2)
5
port 443 namevhost aaa.domain.xyz (/etc/apache2/sites-enabled/aaa.domain.xyz-le-ssl.conf:2)
6
port 443 namevhost domain.xyz (/etc/apache2/sites-enabled/domain.xyz-le-ssl.conf:2)
7
port 443 namevhost www.domain.xyz (/etc/apache2/sites-enabled/www.domain.xyz-le-ssl.conf:2)
Wie man sieht, ist aaa.domain.xyz der Default-Server (weil alphabetisch
als erstes inkludiert). Nun wird beim Aufruf der URL
https://www.domain.xyz/ nicht die richtige Seite dargestellt, sondern
stattdessen die Konfiguration für domain.xyz verwendet. Das wundert mich
in zweifacher Hinsicht: zum einen, weil ich in der Konfiguration für
www.domain.xyz keinen Fehler erkennen kann und sie auch analog zur
Konfiguration für domain.xyz ist (im Wesentlichen nur unterschiedliches
DocumentRoot-Verzeichnis). Zum anderen, weil ich bei einer fehlerhaften
Konfiguration erwarten würde, dass der Default-Server aaa.domain.xyz
verwendet wird.
Wenn ich nun bei www.domain.xyz folgende zwei Zeilen zusätzlich einfüge,
ist das Verhalten allerdings wie erwartet: für alle URLs wird eine leere
Antwort mit HTTP-Statuscode 204 zurückgegeben.
1
RewriteEngine On
2
RewriteRule .* - [R=204]
Aufgrund dieses Verhaltens spekuliere ich, dass ein Problem mit dem
DocumentRoot-Verzeichnis vorliegt. Die Berechtigungen fürs
DocumentRoot-Verzeichnis sind in beiden Fällen 0755, für die enthaltenen
Dateien (insb. index.html, index.php) 0644. Für beide VirtualHosts im
Prinzip gleich.
Hat jemand eine Idee, wo der Fehler liegt? Gibt es eine Möglichkeit, den
"Entscheidungsprozess" von Apache bei der Zuordnung der Anfragen zu den
VirtualHosts zu debuggen?
Die mir bekannten üblichen Anfängerfehler dürften es nicht sein, d.h.
die VirtualHosts sind aktiviert und die Apache-Konfiguration wurde neu
geladen bzw. auch der Server bereits mehrmals neu gestartet (siehe auch
Ausgabe von "apachectl -S").
Grüße und guten Rutsch
vorticon
Hast Du mal mit \_default\_ probiert?
*\_default\_ vhosts for all ports*
Catching every request to any unspecified IP address and port, i.e., an
address/port combination that is not used for any other virtual host.
Hi, danke, evtl. probiere ich es aus, aber ich möchte nicht zu viel
experimentieren, um den laufenden Betrieb des Servers nicht zu
gefährden. Würde gerne verstehen, was ich falsch mache.
Ich vermute nur, aber es könnte vielleicht mit der Reihenfolge
zusammenhängen. Da kann es helfen, Deinen Konfigurationsdateien jeweils
Präfixe wie 10_, 20_, 30_ in die Dateinamen zu schreiben... Versuch
macht kluch. Bei einer ähnlichen Konfiguration war das bei mir die
Lösung.
Hallo zusammen,
Wahrscheinlich entsteht das Problem dadurch, dass zu einer IP-Adresse
mehr als ein namensbasierter, SSL-verschlüsselter VirtualHost nur dann
unterstützt wird, wenn für alle VirtualHosts das gleiche SSL-Zertifikat
(etwa Wildcard-Zertifikat) gültig ist. Ich hatte unterschiedliche
Zertifikate für die einzelnen Subdomains (siehe Konfiguration oben).
Ich habe gerade nicht die Möglichkeit, am laufenden System das Problem
exakt einzugrenzen. Aber ich vermute stark, dass der beschriebene
Sachverhalt ursächlich ist. Falls jemand mit einem ähnlichen Problem auf
diesen Thread stößt, könnte das der Lösungsansatz sein.
Grüße
vorticon
Eine Erläuterung des Problems findet sich hier:
https://cwiki.apache.org/confluence/display/HTTPD/NameBasedSSLVHosts
1
As a rule, it is impossible to host more than one SSL virtual host on the same IP address and port. This is because Apache needs to know the name of the host in order to choose the correct certificate to setup the encryption layer. But the name of the host being requested is contained only in the HTTP request headers, which are part of the encrypted content. It is therefore not available until after the encryption is already negotiated. This means that the correct certificate cannot be selected, and clients will receive certificate mismatch warnings and be vulnerable to man-in-the-middle attacks.
2
3
In reality, Apache will allow you to configure name-based SSL virtual hosts, but it will always use the configuration from the first-listed virtual host (on the selected IP address and port) to setup the encryption layer.
Vorticon X. schrieb:> Hallo zusammen,>> Wahrscheinlich entsteht das Problem dadurch, dass zu einer IP-Adresse> mehr als ein namensbasierter, SSL-verschlüsselter VirtualHost nur dann> unterstützt wird, wenn für alle VirtualHosts das gleiche SSL-Zertifikat> (etwa Wildcard-Zertifikat) gültig ist. Ich hatte unterschiedliche> Zertifikate für die einzelnen Subdomains (siehe Konfiguration oben).
Nö, das ist dank SNI heute kein Problem mehr:
https://de.wikipedia.org/wiki/Server_Name_Indication
Wenn das stimmt…
> Wenn ich nun bei www.domain.xyz folgende zwei Zeilen zusätzlich einfüge,> ist das Verhalten allerdings wie erwartet: für alle URLs wird eine leere> Antwort mit HTTP-Statuscode 204 zurückgegeben.>> 1 RewriteEngine O> 2 RewriteRule .* - [R=204]
…ist die naheliegenste Vermutung, dass die unbekannte Software auf dem
VHost (falls es nicht nur statische HTML Seiten sind) auf die falsche
Domäne konfiguriert ist und mit einem Redirect Antwortet.
Selbst eingebaute Fehler sind immer die schönsten. Eigentlich sollte
doch eine Gegenprobe nur mit http die grundsätzliche Funktion prüfen
können? Prüfpunkte? Dann später schrittweise Zertifikate... prüfen usw.?