Zum Inhalt springen

Apache/HTTP/Vhost/IP

Aus Foxwiki

Was ist IP-basiertes virtuelles Hosting?

IP-basiertes virtuelles Hosting ist eine Methode zur Anwendung verschiedener Richtlinien auf der Grundlage der IP-Adresse und des Ports, über die eine Anfrage eingeht.

  • Meistens wird dies verwendet, um verschiedene Websites auf verschiedenen Ports oder Schnittstellen bereitzustellen.

In vielen Fällen sind namensbasierte virtuelle Hosts praktischer, da sie es vielen virtuellen Hosts ermöglichen, eine einzige Adresse/einen einzigen Port zu nutzen (siehe Namensbasierte vs. IP-basierte virtuelle Hosts ).

Systemanforderungen

Wie der Begriff " schon sagt, muss der Server für jeden IP-basierten virtuellen Host eine andere Kombination aus IP-Adresse und Port haben.

  • Dies kann dadurch erreicht werden, dass der Rechner über mehrere physische Netzwerkverbindungen verfügt, oder durch die Verwendung virtueller Schnittstellen, die von den meisten modernen Betriebssystemen unterstützt werden (Einzelheiten finden Sie in der Systemdokumentation; diese werden häufig als "ip aliases" bezeichnet, und der Befehl "ifconfig" wird am häufigsten zu ihrer Einrichtung verwendet), und/oder durch die Verwendung mehrerer Portnummern.

In der Terminologie des Apache HTTP Servers ist die Verwendung einer einzigen IP-Adresse, aber mehrerer TCP-Ports, auch IP-basiertes virtuelles Hosting.

So richten Sie Apache ein

Es gibt zwei Möglichkeiten, den Apache für die Unterstützung mehrerer Hosts zu konfigurieren.

  • Entweder führen Sie für jeden Hostnamen einen eigenen httpd-Daemon aus, oder Sie lassen einen einzigen Daemon laufen, der alle virtuellen Hosts unterstützt.

Verwenden Sie mehrere Dämonen, wenn:

  • Es gibt Probleme mit der Sicherheitspartitionierung, z. B. möchte Unternehmen1 nicht, dass jemand bei Unternehmen2 seine Daten außer über das Web lesen kann.
  • In diesem Fall bräuchten Sie zwei Daemons, die jeweils mit unterschiedlichen Benutzer-, Gruppen-, Listen- und ServerRoot-Einstellungen laufen.
  • Sie können sich den Speicher- und Dateideskriptorbedarf leisten, der entsteht, wenn Sie jeden IP-Alias auf dem Rechner abhören.
  • Es ist nur möglich, auf die "Wildcard"-Adresse oder auf bestimmte Adressen zu hören.
  • Wenn Sie also aus irgendeinem Grund eine bestimmte Adresse abhören müssen, dann müssen Sie alle bestimmten Adressen abhören. (Obwohl ein httpd auf N-1 der Adressen hören könnte, und ein anderer auf die verbleibende Adresse).

Verwenden Sie einen einzelnen Daemon, wenn:

  • Die gemeinsame Nutzung der httpd-Konfiguration durch virtuelle Hosts ist zulässig.
  • Der Rechner bedient eine große Anzahl von Anfragen, so dass der Leistungsverlust bei der Ausführung separater Daemons erheblich sein kann.

Mehrere Daemons einrichten

Erstellen Sie für jeden virtuellen Host eine eigene httpd-Installation

  • Verwenden Sie für jede Installation die Listen-Direktive in der Konfigurationsdatei, um auszuwählen, welche IP-Adresse (oder welcher virtuelle Host) von diesem Daemon bedient wird, z. B.
 Listen 192.0.2.100:80

Es wird empfohlen, eine IP-Adresse anstelle eines Hostnamens zu verwenden (siehe DNS-Caveats).

Einrichten eines einzelnen Daemons mit virtuellen Hosts

In diesem Fall wird ein einziger httpd Anfragen für den Hauptserver und alle virtuellen Hosts bearbeiten.

  • Die Direktive VirtualHost in der Konfigurationsdatei wird verwendet, um die Werte der Konfigurationsdirektiven ServerAdmin, ServerName, DocumentRoot, ErrorLog und TransferLogoder CustomLogfür jeden virtuellen Host auf unterschiedliche Werte zu setzen. z.B.
 <VirtualHost 172.20.30.40:80>
 ServerAdminwebmaster@www1.example.com DocumentRoot "/www/vhosts/www1"
 ServerName www1.example.com ErrorLog "/www/logs/www1/error_log"
 CustomLog "/www/logs/www1/access_log" kombiniert
</VirtualHost>

 <VirtualHost 172.20.30.50:80>
 ServerAdminwebmaster@www2.example.org DocumentRoot "/www/vhosts/www2"
 ServerName www2.example.org ErrorLog "/www/logs/www2/error_log"
 CustomLog "/www/logs/www2/access_log" combined
</VirtualHost>

Es wird empfohlen, in der <VirtualHost>-Direktive eine IP-Adresse anstelle eines Hostnamens zu verwenden (siehe DNS-Caveats).

Bestimmte IP-Adressen oder Ports haben Vorrang vor ihren Platzhalter-Äquivalenten, und jeder virtuelle Host, der übereinstimmt, hat Vorrang vor der Basiskonfiguration des Servers.

Fast jede Konfigurationsrichtlinie kann in die VirtualHost-Richtlinie eingefügt werden, mit Ausnahme von Richtlinien, die die Prozesserstellung steuern, und einigen anderen Richtlinien.

  • Um herauszufinden, ob eine Direktive in der VirtualHost-Direktive verwendet werden kann, überprüfen Sie den Kontext mithilfe des Direktivenindex.

SuexecUserGroupkann innerhalb einer VirtualHost-Direktive verwendet werden, wenn der suEXEC-Wrapper verwendet wird.

SICHERHEIT: Wenn Sie angeben, wohin die Protokolldateien geschrieben werden sollen, sollten Sie sich einiger Sicherheitsrisiken bewusst sein, die bestehen, wenn jemand anderes als der Benutzer, der den Apache startet, Schreibzugriff auf das Verzeichnis hat, in das die Dateien geschrieben werden.

  • Siehe das Dokument Sicherheitstipps für weitere Details.

Siehe auch

TMP

Namensbasierte vs. IP-basierte virtuelle Hosts

IP-basierte virtuelle Hosts verwenden die IP-Adresse der Verbindung, um den richtigen virtuellen Host zu ermitteln.

  • Daher müssen Sie für jeden Host eine eigene IP-Adresse haben.

Beim namensbasierten virtuellen Hosting verlässt sich der Server darauf, dass der Client den Hostnamen als Teil der HTTP-Header meldet.

  • Mit dieser Technik können sich viele verschiedene Hosts dieselbe IP-Adresse teilen.

Namensbasiertes virtuelles Hosting ist in der Regel einfacher, da Sie nur Ihren DNS-Server konfigurieren müssen, um jeden Hostnamen der richtigen IP-Adresse zuzuordnen, und dann den Apache HTTP Server so konfigurieren müssen, dass er die verschiedenen Hostnamen erkennt.

  • Namensbasiertes virtuelles Hosting entlastet auch die Nachfrage nach knappen IP-Adressen.
  • Daher sollten Sie namenbasiertes virtuelles Hosting verwenden, es sei denn, Sie verwenden Geräte, die ausdrücklich IP-basiertes Hosting verlangen.
  • Historische Gründe für IP-basiertes virtuelles Hosting, die auf der Kundenunterstützung beruhen, sind für einen Allzweck-Webserver nicht mehr anwendbar.

Namensbasiertes virtuelles Hosting baut auf dem IP-basierten Algorithmus zur Auswahl virtueller Hosts auf, was bedeutet, dass die Suche nach dem richtigen Servernamen nur zwischen virtuellen Hosts erfolgt, die die beste IP-basierte Adresse haben.

Interne Verarbeitung

Wie der Server den richtigen namensbasierten virtuellen Host auswählt

Es ist wichtig zu wissen, dass der erste Schritt bei der namensbasierten Auflösung virtueller Hosts die IP-basierte Auflösung ist.

  • Bei der namensbasierten Auflösung virtueller Hosts wird nur der am besten geeignete namensbasierte virtuelle Host ausgewählt, nachdem die Kandidaten auf die beste IP-basierte Übereinstimmung eingegrenzt wurden.
  • Die Verwendung eines Platzhalters (*) für die IP-Adresse in allen VirtualHost-Direktiven macht diese IP-basierte Zuordnung irrelevant.

Wenn eine Anfrage eintrifft, findet der Server das am besten (am spezifischsten) passende <VirtualHost>-Argument auf der Grundlage der von der Anfrage verwendeten IP-Adresse und des Ports.

  • Wenn es mehr als einen virtuellen Host gibt, der diese Kombination aus Adresse und Port enthält, vergleicht der Apache die Direktiven ServerName und ServerAlias mit dem Servernamen in der Anfrage.

Wenn Sie die Direktive ServerName bei einem namensbasierten virtuellen Host weglassen, wird der Server standardmäßig einen vollqualifizierten Domänennamen (FQDN) verwenden, der vom System-Hostnamen abgeleitet ist.

  • Dieser implizit festgelegte Servername kann zu einer kontraintuitiven Anpassung des virtuellen Hosts führen und wird daher nicht empfohlen.

Der standardmäßige namensbasierte vhost für eine Kombination aus IP und Anschluss

Wenn kein passender ServerName oder ServerAlias in der Menge der virtuellen Hosts gefunden wird, die die spezifischste übereinstimmende IP-Adress- und Port-Kombination enthält, dann wird der erste aufgelistete virtuelle Host verwendet, der damit übereinstimmt.

Verwendung von namensbasierten virtuellen Hosts

Verwandte Module Verwandte Richtlinien
  • Kernstück
  • DocumentRoot
  • ServerAlias
  • ServerName
  • <VirtualHost>

Der erste Schritt besteht darin, einen <VirtualHost>-Block für jeden verschiedenen Host zu erstellen, den Sie bedienen möchten.

  • Innerhalb jedes <VirtualHost>-Blocks benötigen Sie mindestens eine ServerName-Direktive, um zu bestimmen, welcher Host bedient wird, und eine DocumentRoot-Direktive, um anzugeben, wo im Dateisystem der Inhalt für diesen Host gespeichert ist.

Hauptwirt verschwindet

Jede Anfrage, die nicht mit einem vorhandenen <VirtualHost> übereinstimmt, wird von der globalen Serverkonfiguration behandelt, unabhängig von Hostname oder ServerName.

Wenn Sie einen namensbasierten virtuellen Host zu einem bestehenden Server hinzufügen und die Argumente des virtuellen Hosts mit bereits vorhandenen IP- und Port-Kombinationen übereinstimmen, werden die Anfragen nun von einem expliziten virtuellen Host bearbeitet.

  • In diesem Fall ist es in der Regel ratsam, einen virtuellen Standard-Hostmit einem ServerName zu erstellen, der mit dem des Basisservers übereinstimmt.
  • Neue Domänen mit derselben Schnittstelle und demselben Port, die jedoch separate Konfigurationen erfordern, können dann als nachfolgende (nicht standardmäßige) virtuelle Hosts hinzugefügt werden.

ServerName-Vererbung

Am besten ist es, in jedem namensbasierten virtuellen Host immer explizit einen ServerName anzugeben.

Wenn ein VirtualHost keinen Servernamen angibt, wird ein Servername von der Basisserverkonfiguration geerbt.

  • Wenn kein Servername global angegeben wurde, wird ein solcher beim Start durch Reverse-DNS-Auflösung der ersten Abhöradresse ermittelt.
  • In jedem Fall beeinflusst dieser geerbte Servername die Auflösung von namensbasierten virtuellen Hosts, so dass es am besten ist, in jedem namensbasierten virtuellen Host immer explizit einen Servernamen anzugeben.

Angenommen, Sie bedienen die Domain www.example.com und möchten den virtuellen Host other.example.com hinzufügen, der auf dieselbe IP-Adresse verweist.

  • Dann fügen Sie einfach Folgendes zu httpd.conf hinzu:
<VirtualHost *:80>
 # Dieser erstgenannte virtuelle Host ist auch der Standard für *:80
 ServerNamewww.example.com ServerAlias example.com DocumentRoot "/www/domain"
</VirtualHost>
<VirtualHost *:80>
 ServerName other.example.com DocumentRoot "/www/otherdomain"
</VirtualHost>

Sie können alternativ eine explizite IP-Adresse anstelle des * in den <VirtualHost>-Direktiven angeben.

  • Sie können dies zum Beispiel tun, um einige namensbasierte virtuelle Hosts auf einer IP-Adresse und entweder IP-basierte oder eine andere Gruppe namensbasierter virtueller Hosts auf einer anderen Adresse zu betreiben.

Viele Server wollen unter mehr als einem Namen erreichbar sein.

  • Dies ist mit der ServerAlias-Direktivemöglich, die innerhalb des <VirtualHost>-Abschnitts platziert wird.
  • Im ersten <VirtualHost>-Block oben zeigt die ServerAlias-Direktive beispielsweise an, dass die aufgeführten Namen andere Namen sind, unter denen die gleiche Website aufgerufen werden kann:
ServerAlias example.com *.example.com

dann werden Anfragen für alle Hosts in der Domäne example.com vom virtuellen Host www.example.com bedient.

  • Die Platzhalterzeichen * und ? können verwendet werden, um Namen abzugleichen.
  • Natürlich können Sie nicht einfach Namen erfinden und sie in ServerName oder ServerAlias einfügen.
  • Sie müssen zuerst Ihren DNS-Server richtig konfigurieren, um diese Namen einer IP-Adresse zuzuordnen, die mit Ihrem Server verbunden ist.

Namensbasierte virtuelle Hosts für den am besten übereinstimmenden Satz von <virtualhost>swerden in der Reihenfolge verarbeitet, in der sie in der Konfiguration erscheinen.

  • Der erste übereinstimmende ServerName oder ServerAlias wird verwendet, wobei es keine unterschiedliche Rangfolge für Platzhalter gibt (auch nicht für ServerName vs. ServerAlias).

Die vollständige Liste der Namen in der VirtualHost-Direktivewird genauso behandelt wie ein (nicht wildcard) ServerAlias.

Schließlich können Sie die Konfiguration der virtuellen Hosts feinabstimmen, indem Sie andere Direktiven in den <VirtualHost>-Containern platzieren.

  • Die meisten Direktiven können in diesen Containern platziert werden und ändern dann nur die Konfiguration des betreffenden virtuellen Hosts.
  • Um herauszufinden, ob eine bestimmte Direktive erlaubt ist, prüfen Sie den Kontext der Direktive.
  • Konfigurationsdirektiven, die im Hauptserverkontext(außerhalb eines <VirtualHost>-Containers) gesetzt werden, werden nur dann verwendet, wenn sie nicht durch die Einstellungen des virtuellen Hosts überschrieben werden.