Zum Inhalt springen

Apache/HTTP/Vhost/IP: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „line>“ durch „line copy>“
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Apache/HTTP/Virtuelle Server/IP-basiert''' IP-basiertes virtuelles Hosting
'''Apache/HTTP/Vhost/IP-basiert''' - IP-basiertes virtuelles Hosting


=== Beschreibung ===
=== Beschreibung ===
Zeile 13: Zeile 13:
In der Terminologie des Apache HTTP Servers ist die Verwendung einer einzigen IP-Adresse, aber mehrerer TCP-Ports, auch IP-basiertes virtuelles Hosting.
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 ==
== Konfiguration ==
; So richten Sie Apache ein
Es gibt zwei Möglichkeiten, den Apache für die Unterstützung mehrerer Hosts zu konfigurieren.
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 <code>httpd-Daemon</code> aus, oder Sie lassen einen einzigen Daemon laufen, der alle virtuellen Hosts unterstützt.
* Entweder führen Sie für jeden Hostnamen einen eigenen <code>httpd-Daemon</code> aus, oder Sie lassen einen einzigen Daemon laufen, der alle virtuellen Hosts unterstützt.
Zeile 28: Zeile 29:
* Der Rechner bedient eine große Anzahl von Anfragen, so dass der Leistungsverlust bei der Ausführung separater Daemons erheblich sein kann.
* 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 ==
== Mehrere Daemons ==
; Mehrere Daemons einrichten
Erstellen Sie für jeden virtuellen Host eine eigene <code>httpd-Installation</code>
Erstellen Sie für jeden virtuellen Host eine eigene <code>httpd-Installation</code>
* Verwenden Sie für jede Installation die <code>Listen-Direktive</code> in der Konfigurationsdatei, um auszuwählen, welche IP-Adresse (oder welcher virtuelle Host) von diesem Daemon bedient wird, z. B.
* Verwenden Sie für jede Installation die <code>Listen-Direktive</code> in der Konfigurationsdatei, um auszuwählen, welche IP-Adresse (oder welcher virtuelle Host) von diesem Daemon bedient wird, z. B.


<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  Listen 192.0.2.100:80
  Listen 192.0.2.100:80
</syntaxhighlight>
</syntaxhighlight>
Zeile 38: Zeile 40:
Es wird empfohlen, eine IP-Adresse anstelle eines Hostnamens zu verwenden (siehe DNS-Caveats).
Es wird empfohlen, eine IP-Adresse anstelle eines Hostnamens zu verwenden (siehe DNS-Caveats).


== Einrichten eines einzelnen Daemons mit virtuellen Hosts ==
== Daemon mit virtuellen Hosts ==
; Einrichten eines einzelnen Daemons mit virtuellen Hosts
In diesem Fall wird ein einziger <code>httpd</code> Anfragen für den Hauptserver und alle virtuellen Hosts bearbeiten.
In diesem Fall wird ein einziger <code>httpd</code> Anfragen für den Hauptserver und alle virtuellen Hosts bearbeiten.
* Die Direktive <code>VirtualHost</code> in der Konfigurationsdatei wird verwendet, um die Werte der Konfigurationsdirektiven <code>ServerAdmin</code>, <code>ServerName</code>, <code>DocumentRoot</code>, <code>ErrorLog</code> und <code>TransferLog</code>oder <code>CustomLog</code>für jeden virtuellen Host auf unterschiedliche Werte zu setzen. z.B.
* Die Direktive <code>VirtualHost</code> in der Konfigurationsdatei wird verwendet, um die Werte der Konfigurationsdirektiven <code>ServerAdmin</code>, <code>ServerName</code>, <code>DocumentRoot</code>, <code>ErrorLog</code> und <code>TransferLog</code>oder <code>CustomLog</code>für jeden virtuellen Host auf unterschiedliche Werte zu setzen. beispielsweise
<syntaxhighlight lang="apache" line>
<syntaxhighlight lang="apache" line copy>
  <VirtualHost 172.20.30.40:80>
  <VirtualHost 172.20.30.40:80>
  ServerAdminwebmaster@www1.example.com DocumentRoot "/www/vhosts/www1"
  ServerAdminwebmaster@www1.example.com DocumentRoot "/www/vhosts/www1"
Zeile 70: Zeile 73:
* [[SuEXEC]]
* [[SuEXEC]]


[[Kategorie:Apache/HTTP/Virtuelle Server]]
[[Kategorie:Apache/HTTP/Vhost]]


= TMP =
== Namensbasierte vs.&nbsp;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.
[[Kategorie:Apache/HTTP/Vhost]]
* 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 <code><VirtualHost>-Argument</code> 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 <code>ServerName</code> und <code>ServerAlias</code> mit dem Servernamen in der Anfrage.
 
Wenn Sie die Direktive <code>ServerName</code> 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 ==
{| class="wikitable float"
!Verwandte Module
!Verwandte Richtlinien
|-
|
* <code>Kernstück</code>
|
* <code>DocumentRoot</code>
* <code>ServerAlias</code>
* <code>ServerName</code>
* <code><VirtualHost></code>
|}
 
Der erste Schritt besteht darin, einen <code><VirtualHost>-Block</code> für jeden verschiedenen Host zu erstellen, den Sie bedienen möchten.
* Innerhalb jedes <code><VirtualHost>-Blocks</code> benötigen Sie mindestens eine <code>ServerName-Direktive</code>, um zu bestimmen, welcher Host bedient wird, und eine <code>DocumentRoot-Direktive</code>, um anzugeben, wo im Dateisystem der Inhalt für diesen Host gespeichert ist.
 
=== Hauptwirt verschwindet ===
Jede Anfrage, die nicht mit einem vorhandenen <code><VirtualHost></code> ü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 <code>ServerName</code> 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 <code>ServerName</code> anzugeben.
 
Wenn ein <code>VirtualHost</code> keinen <code>Servernamen</code> 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 <code>Servernamen</code> anzugeben.
 
Angenommen, Sie bedienen die Domain www.example.com <code>und</code> möchten den virtuellen Host <code>other.example.com</code> hinzufügen, der auf dieselbe IP-Adresse verweist.
* Dann fügen Sie einfach Folgendes zu <code>httpd.conf</code> 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 <code>*</code> in den <code><VirtualHost>-Direktiven</code> 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 <code>ServerAlias-Direktive</code>möglich, die innerhalb des <code><VirtualHost>-Abschnitts</code> platziert wird.
* Im ersten <code><VirtualHost>-Block</code> oben zeigt die <code>ServerAlias-Direktive</code> 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 <code>example.com</code> vom virtuellen Host <code>www.example.com</code> bedient.
* Die Platzhalterzeichen <code>*</code> und <code>?</code> können verwendet werden, um Namen abzugleichen.
* Natürlich können Sie nicht einfach Namen erfinden und sie in <code>ServerName</code> oder <code>ServerAlias</code> 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 <code><virtualhost>s</code>werden in der Reihenfolge verarbeitet, in der sie in der Konfiguration erscheinen.
* Der erste übereinstimmende <code>ServerName</code> oder <code>ServerAlias</code> wird verwendet, wobei es keine unterschiedliche Rangfolge für Platzhalter gibt (auch nicht für ServerName vs.&nbsp;ServerAlias).
 
Die vollständige Liste der Namen in der <code>VirtualHost-Direktive</code>wird genauso behandelt wie ein (nicht wildcard) <code>ServerAlias</code>.
 
Schließlich können Sie die Konfiguration der virtuellen Hosts feinabstimmen, indem Sie andere Direktiven in den <code><VirtualHost>-Containern</code> 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 <code><VirtualHost>-Containers</code>) gesetzt werden, werden nur dann verwendet, wenn sie nicht durch die Einstellungen des virtuellen Hosts überschrieben werden.
 
[[Kategorie:Apache/HTTP/Virtuelle Server]]

Aktuelle Version vom 11. Mai 2025, 12:40 Uhr

Apache/HTTP/Vhost/IP-basiert - IP-basiertes virtuelles Hosting

Beschreibung

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.

Konfiguration

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

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).

Daemon mit virtuellen Hosts

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. beispielsweise
 <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