Vor einigen Tagen ist mir aufgefallen, dass Apache für eine meiner Domains den Default Server Eintrag ausliefert, anstelle den Named Virtual Host. Aber warum? Was hat sich geändert? Denn früher und auch für andere Domains funktioniert alles.

Erste Schritte: Apache Konfiguration sichten

Stimmt etwas mit der Konfiguration nicht? Einloggen auf dem Server und Konfiguration analysieren:

$ apache2ctl -t
Syntax OK
$ apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443                  is a NameVirtualHost
         default server brinner.net (/etc/apache2/sites-enabled/000-default-ssl:2)
         port 443 namevhost brinner.net (/etc/apache2/sites-enabled/000-default-ssl:2)
         [...]
*:80                   is a NameVirtualHost
         default server localhost (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost localhost (/etc/apache2/sites-enabled/000-default:1)
         [...]
         port 80 namevhost brinnergmbh.de (/etc/apache2/VHosts/vm-03/VZHosts/brinnergmbh.de.conf:1)
         [...]
Syntax OK

Diese Ausgaben sehen soweit alle in Ordnung aus. Neben vielen anderen, wird auch der vermisste namevhost mit der korrekten Konfiguraionsdatei aufgelistet. Warum wird dann die Default Seite ausgeliefert?

Download der Seite mit curl

Moderne Browser haben eine Unmenge an Eigenintelligenz. Meist liegen sie damit richig, aber manchmal kann diese auch hinderlich sein. Oder der Browser greift auf gecachte Daten zu und ignoriert deswegen aktuelle Änderungen.

In diesem Fall hilft es oft, wenn man mal mit Low-Level Tools auf die Seite zugreift. Mit curl und wget sieht man ziemlich gut, welche Kommunikation mit dem Server wirklich stattfindet:

$ curl http://brinnergmbh.de
<html>
  <head>
<base href="http://brinnergmbh.de/" />
<title>&dtml-title_or_id;</title>

     <meta http-equiv="refresh" content="0; URL=http://www.brinner.com">

  </head>
  <body bgcolor="#E5EAD8">
  </body>
</html>

Aha, hier wird ja die korrekte Antwort zurück geliefert! Eine Weiterleitung auf die Domain brinner.com.

Also nochmals im Browser ganz explizit http://brinnergmbh.de eingegeben und siehe da: Die Weiterleitung erfolgt und die erwartete Seite wird angezeigt.

Zusammenfassung

Es war also gar kein Server Problem. Zumindest hat sich am Server nichts geändert. Was sich geändert hat, ist das Browserverhalten!

Wenn man bei modernen Browsern einfach nur die URL einträgt, so versuchen diese standardmäßig zuerst die verschlüsselte Seite über https zu erreichen. Das macht auch Sinn und führte bei mir zu dem Fehlverhalten, da mein Apache den speziellen namevhost nur unverschlüsselt kannte. Daher wurde die verschlüsselte Default Seite angezeigt.

Lösung

Endlich alle Domains, auch wenn sie nur statische Seiten sind, über https ausliefern.