Warum können virtuelle Webserver über den Namen unterschieden werden?

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Funktionsweise

  • Virtuelle Webserver werden durch den Host-Header in der HTTP-Anfrage unterschieden.
  • Der Client sendet beim Webseitenaufruf den Domainnamen im Header mit.
  • Apache liest diesen Host-Header und leitet die Anfrage zum passenden VirtualHost weiter.
  • Mehrere Domains können so über eine einzige IP-Adresse verwaltet werden.

Beispiel einer Anfrage

Wenn ein Browser eine Webseite aufruft, sendet er folgende HTTP-Anfrage:

GET /index.html HTTP/1.1
Host: www.example.com

Apache prüft den Host:-Eintrag und sucht nach einem passenden VirtualHost:

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/example
</VirtualHost>

<VirtualHost *:80>
    ServerName www.test.com
    DocumentRoot /var/www/test
</VirtualHost>

Je nach Domain wird entweder /var/www/example/ oder /var/www/test/ ausgeliefert.

Warum funktioniert das auch mit HTTPS?

  • HTTPS verschlüsselt die Kommunikation zwischen Client und Server.
  • Dennoch muss der Server wissen, welches Zertifikat er für eine Domain verwenden soll.
  • Dies geschieht über SNI (Server Name Indication), eine Erweiterung von TLS.
  • Der Client sendet den Hostnamen bereits unverschlüsselt im TLS-Handshake.
  • Apache nutzt diesen Hostnamen, um das richtige Zertifikat auszuwählen.

Vorteile von Named-Based VirtualHosts

  • Mehrere Domains auf einer einzigen IP-Adresse möglich.
  • Keine zusätzliche Netzwerkkonfiguration nötig.
  • Geringerer Ressourcenverbrauch als separate IP-Adressen pro Webseite.
  • Funktioniert mit HTTP und HTTPS durch SNI-Unterstützung.