Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Der Apache-Webserver kann so konfiguriert werden, dass er für unterschiedliche Hostnamen verschiedene Inhalte liefert. Dies wird als "Virtual Hosting" bezeichnet und ist nützlich, um viele Websites auf einem Apache-Webserver zur Verfügung zu stellen.
Jede dieser Websites nennt sich im Folgenden Virtual Host, es ist nicht notwendig, für jede dieser Websites eine eigene IP Adresse zu haben, alle Virtual Hosts können sich eine IP-Adresse teilen.
Namensbasierte Virtuelle Hosts sind die gängigste Methode zur Konfiguration virtueller Hosts und werden für eine gemeinsame IP-Adresse eingerichtet. Apache entscheidet anhand des HTTP-Headers, welche Seite ausgeliefert wird. Hierfür ist es aber notwendig, dass der Client das HTTP 1.1 Protokoll unterstützt (was bei allen gängigen Webbrowsern der Fall ist)!
Im Verzeichnis /etc/apache2/sites-available/ befindet sich die Datei default. Diese kann man als Vorlage für die weiteren virtuellen Hosts verwenden. Für jeden virtuellen Host wird dann eine eigene Datei angelegt.
Auch sollte die default-Site nicht deaktiviert werden, da die darin enthaltene "NameVirtualHost"-Direktive erst den Betrieb von Virtual Hosts möglich macht.
Im Folgenden wird die Standardkonfigurationsdatei des Virtuellen Hosts "default" erklärt, die einzelnen Direktiven sind Links in die deutschsprachige Apache-Dokumentation, wo weitere Informationen verfügbar sind. Am Besten speichert man den Inhalt dieser Datei neu unter /etc/apache2/sites-available/.
In der Datei /etc/apache2/ports.conf muss Folgendes eingetragen sein:
NameVirtualHost *
Die NameVirtualHost-Direktive
sorgt dafür, dass Apache alle Anfragen aller IP-Adressen für Virtual Hosts verwendet. Es ist auch möglich, dies auf eine von mehreren IP's zu begrenzen.
Die einzelnen Dateien in /etc/apache2/sites-available/<virtualhostname> :
<VirtualHost *> . . . </VirtualHost>
Die VirtualHost-Direktive
dient dazu, weitere Direktiven für einen Virtual Host zu definieren. Alles was zwischen diesen beiden Tags steht wird nur für diesen einen Virtual Host verwendet.
ServerAdmin webmaster@localhost
Mit der ServerAdmin
Direktive sollte die E-Mail-Adresse des Server-Administrators hinterlegt werden. Diese wird u.a. in den Fehlermeldungen des Apache stehen und ist für den Kontakt zum Administrator erforderlich!
ServerName servername
Mit der ServerName
Direktive wird festgelegt, unter welchem primären Namen eine Seite erreichbar ist. Es ist zwingend erforderlich, dass dieser Name entweder via DNS oder alternativ über die /etc/hosts auflösbar ist!
ServerAlias name1 name2 name3
Wenn ein und die selbe Seite unter verschiedenen Rechnernamen erreichbar sein muss, ist es erforderlich diese mit der ServerAlias
Direktive zu definieren.
DocumentRoot /var/www
Mit der DocumentRoot
Direktive muss das Basisverzeichnis (engl. Document Root) des Virtual Hosts (bzw. der Seite) angegeben werden. Sollte nun mit http://servername/datei.html ein Zugriff versucht werden, so würde Apache in diesem Beispiel die Datei /var/www/datei.html an den Client ausliefern.
Es ist sehr sinnvoll für jede Datei unter /etc/apache2/sites-available/ auch einen Ordner unterhalb von /var/www/ anzulegen, da so die Übersicht über viele Virtual Hosts einfacher ist. Des Weiteren machen mit einigen Apache-Modulen wie suphp andere Verzeichnisse als /var/www/ Probleme!
Mit der Directory
und Location
Direktive können Einstellungen und Berechtigungen für die Verzeichnisse des Apache vergeben werden. Eine detaillierte Erklärung der möglichen Direktiven innerhalb der Directory-Direktive würde den Umfang dieses Wiki-Artikels jedoch bei weitem sprengen.
Ein physikalisches Verzeichnis ist ein real existierender Ordner im Dateisystem, auch hierfür können Einstellungen und Berechtigungen vergeben werden.
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>Ein Virtuelles Verzeichnis ist ein Ordner, der mit dem Browser aufgerufen wird, dies ist bei jeder Seite mindestens /, welche für das Basisverzeichnis des Servers steht.
<Location />
Options FollowSymLinks
AllowOverride None
</Location>Eine Location Direktive ist nicht unbedingt nötig, auch wird eine Location Direktive nach allen anderen Direktiven (Directory, .htaccess, Files) ausgewertet. Der Vorteil einer Location Direktive ist, dass sie sich auf URLs, und nicht auf physikalisch vorhandene Dateien bezieht.
Hier als Beispiel die wichtigsten Direktiven innerhalb von Directory:
Options - Ermöglicht das Anpassen von Optionen für diesen Pfad (Options
)
AllowOverride - Hiermit kann man einstellen, was innerhalb der Seite mit einer vorhandenen .htaccess erlaubt ist (AllowOverride
)
Order - Hiermit können die Zugriffsrechte für dieses Verzeichnis angegeben werden (Order
)
So würde eine funktionierende Virtual Host-Konfiguration aussehen.
<VirtualHost *>
ServerName maxisforum.dyndns.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www/maxisforum/
<Directory /var/www/maxisforum/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>Wenn ein neuer Virtual Host angelegt wurde, ist dieser zwar verfügbar ("available") aber noch nicht aktiviert ("enabled"). Auf Debian basierenden Systemen (somit auch Ubuntu) können folgende Befehle verwendet werden:
sudo a2ensite <virtualhostdateiname>
Dies würde den VirtualHost mit dem Dateinamen <virtualhostdateiname> aktivieren.
Natürlich kann man die Seite auch wieder deaktivieren mit dem Befehl:
sudo a2dissite <virtualhostdateiname>
Wenn man die Seite default mit a2dissite deaktiviert hat, ist sicher zu stellen, dass es eine NameVirtualHost Anweisung gibt!
Um einen VirtualHost ohne vorhandenen DNS Eintrag zu testen ist es möglich die /etc/hosts hierfür anzupassen. Es muss lediglich der Eintrag von localhost angepasst werden. Angenommen eine /etc/hosts sieht so aus:
127.0.0.1 localhost
könnte man dies so machen:
127.0.0.1 localhost virtualhosttest
Natürlich muss man virtualhosttest durch den konfigurierten Hostnamen ersetzen.
Diese Revision wurde am 15. Dezember 2011 20:56 von Heinrich Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen:
Netzwerk, Server, Internet
2004 – 2012 ubuntuusers.de • Einige Rechte vorbehalten