| Ein Apache Server ist außerordentlich flexibel. Er kann nicht nur als Standard Webserver arbeiten, sondern in Form weiterer 'Virtueller Server' zusätzliche Aufgaben übernehmen. | Virtuelle Server sind normalerweise ebenfalls Webserver, jedoch mit unterschiedlicher Konfiguration. |
Apache
|
Der weltweit erfolgreichste Standard Webserver (Linux, Windows) |
| VirtualHost | Virtuelle Server zusätzlich zum Apache Standard Webserver |
| Voraussetzungen | und Vorarbeiten zur Einrichtung virtueller Webserver |
| Konfiguration | Einrichtung einer übersichtlichen und flexiblen Konfiguration |
| Port 8080 | Beispiel eines virtuellen Servers an der gleichen Adresse, Port 8080 |
| php_value | Individuelle PHP-Konfiguration für virtuelle Webserver |
Virtuelle WebServer |
|
|
•
Der Apache Webserver arbeitet normalerweise als Standard Webserver am eigenen PC
oder im lokalen Netzwerk (LAN). • Es ist möglich, zusätzliche virtuelle Webserver einzurichten, die sich wie weitere unabhängige Server verhalten, tatsächlich jedoch von einem einzelnen Server-Programm ausgeführt werden. |
Das kann sinnvoll sein, wenn jeder dieser virtuellen Server andere
spezialisierte Aufgaben übernimmt. Auf diese Weise ist es möglich, einen virtuellen Server genau an einen bestimmten Bedarf (z.B. an ein Programm-Paket) anzupassen. |
|
Beispiel: Webspace-Provider
Ein typisches Beispiel ist der Server eines Webspace-Providers:• Jeder Kunde erhält seinen eigenen Webspace, meist mit einer eigenen Domain, der (scheinbar) von einem eigenen Webserver verwaltet wird. • Tatsächlich betreibt der Provider nur einen einzigen Webserver, auf dem viele einzelne virtuelle Server konfiguriert sind. Beispiel: LAN und Internet
Man kann das gleiche Web durch getrennte Server für das lokale Netzwerk (LAN)
und für das Internet verwalten. Das bietet die Möglichkeit,
den Zugang unterschiedlich, aber übersichtlich einzurichten.
|
Beispiel: Programm-Pakete
Im Internet erhält man (meist kostenfrei) zahllose Pakete von Web-Programmen,
z.B. Groupware (Termine, Kalender, Kontakte, Projekte), Content Management (CMS),
Foren, Blogs usw.Leider sind die meisten Pakete nicht voll portabel, d.h. sie stellen besondere Ansprüche an Installations-Pfad und Server. ● In diesem Fall ist der Einsatz eines virtuellen Servers unumgänglich: Das Paket ist direkt und ohne andere Dokumente im DocumentRoot Verzeichnis des virtuellen Servers enthalten, die Details der Konfiguration sind genau auf das Paket abgestimmt. |
Typische Varianten virtueller Webserver:• Mehrere Server für unterschiedliche Server-Namen (Domain-Namen).• Mehrere Server für unterschiedliche IP-Adressen am gleichen PC. • Mehrere Server für die gleiche IP-Adresse, jedoch unterschiedliche Ports. (↓ Beispiel auf dieser Seite) • Mehrere Server für den gleichen Inhalt, jedoch unter verschiedenen Namen, mit unterschiedlichen Zugriffs-Rechten, usw. • Seit Apache Version 2 kann man zusätzlich zu einem Hauptserver für das → HTTP-Protokoll auch virtuelle Server für andere Protokolle betreiben. |
♣
Tipp: Bevor man beginnt, mit virtuellen Servern zu experimentieren,
sollte man Erfahrung mit einem einzelnen Webserver sammeln. ♣ Der Einstieg in die Technik virtueller Server ist eine gewisse Hürde: Beginnen sie ohne Druck mit einem reinen Experimentier-Server, der nicht im realen Einsatz steht. ♣ Wenn der erste virtuelle Server funktioniert, fällt die Konfiguration weiterer relativ leicht. Außerdem entwickelt man (erst) dann brauchbare Vorstellungen über weitere anwendungs-Bereiche. |
Voraussetzungen und Vorarbeiten |
|
Voraussetzungen● Voraussetzung für die Einrichtung eines Virtuellen Servers ist ein eigener Webserver. Für alle Beispiele dieser Seite ist das ein Standard Apache Webserver.● Man benötigt Administrator-Rechte (root) am Server-PC, mindestens jedoch das Recht, die Apache Konfiguration zu ändern, den Server neu zu starten und das Dokumente-Verzeichnis einzurichten. ● Der (Apache) Webserver muss einwandfrei laufen. Alle Dateien aus seinem Dokumente-Verzeichnis (DocumentRoot) müssen zugänglich sein. ● Zusätzliche Funktionen wie z.B. Perl, PHP, Python oder ein am gleichen PC laufender SQL Datenbank-Server sind nicht notwendig aber möglich. |
● Jedes Betriebssystem ist für einen experimentellen Server geeignet. Für den professionellen Einsatz kommt praktisch nur Linux in Frage, und zwar nicht die populären Desktop-Distributionen, sondern streng professionelle wie z.B. Debian. ● Einige Erfahrung mit Konfiguration und Betrieb eines eigenen Standard Webservers ist sehr empfehlenswert. ● Für Experimente gut geeignet sind ältere PC geringer Leistung, die nicht mehr für andere Zwecke eingesetzt werden. Ideal geeignet für Experimente jeder Art sind → Virtuelle Systeme. |
DocumentRootNormalerweise unterscheiden sich die Angebote der einzelnen (virtuellen) Server. Es ist daher notwendig, für jeden virtuellen Server ein eigenes Dokumente-Verzeichnis einzurichten.Beispiel Linux (Dokumente-Verzeichnisse des Standard-Servers und des virtuellen Servers):
/srv/www/htdocs
/srv/wv1/htdocs Beispiel Windows:
C:\web\htdocs
Vorsicht: Verzeichnisse mit unsauberen Namen (Leerzeichen, Umlaute, ...)
sind unbrauchbar, z.B.
C:\wv1\htdocs C:\Dokumente und Einstellungen\...
♣ Es ist immer ratsam, ein eigenes Dokumente-Verzeichnis einzurichten. Selbst dann, wenn der virtuelle Server später die gleichen Dokumente verwalten soll, kann man die Funktion des virtuellen Servers mit getrennten Webseiten besser testen. |
DokumenteIm Dokumente-Verzeichnis des virtuellen Servers muss sich mindestens eine Start-Datei befinden:index.html
Diese Webseite wird so primitiv wie möglich gestaltet. Sie dient nur zur Feststellung der Funktion des virtuellen Servers. Alle Fehler mit anderen Ursachen müssen ausgeschaltet sein. Beispiel einer solchen Text-Datei index.html
<html>
Diese Datei wird - nur zum Test - direkt (z.B. Menü Datei | Öffnen)
mit einem Browser geöffnet. Sie muss problemlos angezeigt werden.<h1>Virtueller Webserver</h1> </html> Später, wenn der virtuelle Server läuft, ergänzt man die Startseite mit beliebig komplizierten Tests aller gewünschten Server-Funktionen, z.B. mit Perl, PHP oder Python-Dateien. |
FirewallAuf praktisch jedem PC läuft heute ein Firewall, um unerwünschten Daten-Verkehr zu unterbinden.
Die Firewall-Regeln aller beteiligten PC
(Server + Client-PC) müssen für den neuen virtuellen Server
ergänzt werden.
Um die Apache-Konfiguration ohne störenden Einfluss zu testen,
können die Firewalls evtl. auch kurzzeitig abgeschaltet werden -
am besten bei gleichzeitig unterbrochener Verbindung zum Internet.
|
Die Firewalls müssen den Zugang zum Standard-Webserver ebenso wie zum neuen virtuellen Server erlauben: Der Verkehr auf IP-Adresse(n) und Standard-Port 80 und auf allen evtl. zusätzlich konfigurierten Ports muss zugelassen werden ! |
KonfigurationEs ist nicht unbedingt notwendig, jedoch sehr empfehlenswert, die Konfiguration des Apache Servers übersichtlich und flexibel einzurichten (nächstes ↓ Kapitel). |
Das hat nicht nur für virtuelle Server Vorteile sondern für jede individuelle Konfiguration. |
Gleiche (IP)-Adresse, anderer Port |
|
|
●
Jeder Standard Webserver lauscht (erwartet Aufträge) auf Port 80. ● Ein zusätzlicher virtueller Server kann an einem anderen Port lauschen. In diesem Beispiel wird ein virtueller Server konfiguriert, der an Port 8080 lauscht. Alternativ ist jeder andere freie Port verwendbar. Kontrollieren sie dazu ihren Server und die → Liste der vergebenen Ports. Diese Variante eines virtuellen Servers funktioniert zuverlässig und stellt keine weiteren Anforderungen (z.B. zusätzliche Netzwerk-Interface, Nameserver, ...). ♦ Details zu den Themen IP-Adresse, Port, Apache (Linux, Windows) |
Voraussetzungen● Der Standard Apache Webserver arbeitet (auf Port 80) einwandfrei.● Für den virtuellen Server ist ein eigenes Dokumente-Verzeichnis eingerichtet. ● Im Dokumente-Verzeichnis des virtuellen Servers befindet sich eine Startseite index.html |
Anwendung● Die zusätzliche Verwendung anderer Ports ist am eigenen Webserver sehr vorteilhaft. Jeder Server verwaltet andere Arten von Webseiten und wird anders konfiguriert.Beispiel: An selbst hergestellte Webseiten kann man strenge Anforderungen stellen. (Qualität, Sicherheit, Standards...) Die meisten größeren Programm-Pakete sind leider mehr oder weniger unsauber und lassen sich daher nur mit tolerant eingestelltren Servern betreiben. Beispiel: Die Trennung der Logs (Access, Error) nach Kategoriern ist ein großer Vorteil. Das eigene Web muss anders dokumentiert werden als tausende dynamische Webseiten (Script-Programme) von Programm-Peketen. |
EinschränkungenDiese Technik funktioniert nur am eigenen Server.● Ein Web-Provider kann theoretisch auch andere Ports als 80 freigeben. Das erfordert jedoch eine individuelle Vereinbarung (und Bezahlung). ● Der Firewall des Servers muss zugänglich sein. Dort muss man den verwendeten Port zusätzlich freigeben. Dies ist keine Standard-Funktion, daher muss man zur Konfiguration die ExpertInnen-Einstellungen aufsuchen. |
Apache Konfiguration httpd.confDer Ausgangspunkt zur Apache Konfiguration ist die Datei httpd.confIn neueren Systemen ist die Konfiguration auf mehrere Dateien verteilt: Sie müssen selbst die Datei und den Abschnitt suchen, welche von der einzigen notwendigen Änderung (rechts) betroffen ist. |
ListenSuchen sie jene Anweisung, welche den Port festlegt, an welchem der Webserver lauscht (→ HTTP-Aufträge entgegennimmt).Diese Anweisung lautet normalerweise Listen 80
Ergänzen sie eine zusätzliche Anweisung für den gewünschten
Port (in diesem Beispiel für Port 8080):
Listen 80
Listen 8080 |
Zwischen-TestZu diesem Zeitpunkt ist noch kein virtueller Server konfiguriert. Man sollte jedoch kontrollieren, ob der Webserver an beiden Ports arbeitet.● Erlaubt der Firewall den Zugriff auf den neuen Port ? ● Führen sie einen Neustart des Webservers durch. ● Löschen sie vor jedem Test den Cache-Speicher ihres Browsers ! ● Fordern sie von ihrem Server über beide Ports Dokumente an: Ohne Angabe des Ports wird der Standard-Port 80 verwendet. |
Anforderung von Dokumenten (hier index.html) über verschiedene Ports:
http://192.168.0.1/index.html
Ersetzen sie die angegebene Adresse durch den Namen oder die IP-Adresse
ihres eigenen Servers.http://192.168.0.1:8080/index.html Jedes vom Webserver verwaltete Dokument muss sich unter beiden Ports öffnen lassen. |
Konfigurations-Datei virtual.confErstellen sie im Verzeichnis ihrer individuellen Konfigurations-Dateien (hier myconf) eine Text-Datei (hier virtual.conf) zur Konfiguration des virtuellen Servers, z.B.
/etc/apache/myconf/virtual.conf
C:\Programme\Apache...\conf\myconf\virtual.conf In manchen Apache Distributionen ist die Datei httpd-vhosts.conf enthalten. Sie müsste zur Verwendung geändert werden. Es besser, diese Datei als Muster unverändert zu lassen, und eine neue Datei selbst zu erstellen. Falls der Start nicht gelingt, dann können sie die Datei jederzeit in ein anderes Verzeichnis (hier abgeschaltet) verschieben. Wenn sie danach den Server neu starten, muss er so wie vorher (ohne virtuelle Server) funktionieren. Rechts das Muster einer Konfigurations-Datei für einen virtuellen Server auf Port 8080. Vorsicht:
Das Muster muss vor Verwendung genau und sorgfältig an die
Verhältnisse ihres eigenen Servers angepasst werden !
|
# Virtuelle Server auf Port 80+8080
NameVirtualHost *:80NameVirtualHost *:8080 # Haupt-Server:
<VirtualHost *:80>
ServerAdmin admin@mymail
</VirtualHost>DocumentRoot "/srv/www/htdocs" # DocumentRoot "C:/web/htdocs"
ServerName mysrv:80ErrorLog logs/error.log CustomLog logs/access.log common # Server auf Port 8080:
<VirtualHost *:8080>
ServerAdmin admin@mymail
</VirtualHost>
DocumentRoot "/srv/wv1/htdocs" # DocumentRoot "C:/wv1/htdocs"
ServerName mysrv:8080ErrorLog logs/verror.log CustomLog logs/vaccess.log common <Directory "/srv/wv1/htdocs">
AllowOverride All
</Directory>
Order allow,deny Allow from localhost Allow from 192.168.0.0/255.255.255.0 |
|
Die wichtigste Konsequenz:
Die vorher erfolgte Konfiguration des "Haupt-Servers"
(auf dem Standard-Port 80) wird bei Konfiguration von Virtuellen Servern
außer Kraft gesetzt !
An die Stelle des bisherigen Haupt-Servers tritt der erste Virtuelle Server. Beachten sie daher besonders die Reihenfolge der Anweisungen: ● Virtuelle Server werden immer zuletzt eingerichtet, nach Verarbeitung aller anderen Konfigurations-Anweisungen. ● Der erste virtuelle Server nimmt die Rolle des Haupt-Servers ein. |
● Wenn am Server eine Anforderung eintrifft, dann wird an Hand der Konfiguration überprüft, ob ein nach dem ersten folgender virtueller Server für die Ausführung zuständig ist. ● Wenn kein zuständiger virtueller Server gefunden wird, dann übernimmt der erste virtuelle Server in der Rolle des Haupt-Servers die Verarbeitung. |
NameVirtualHostDamit werden IP-Adresse(n) und Port(s) für die beiden Server festgelegt. Ein * an Stelle einer fixen IP-Adresse empfängt Anforderungen von allen Netzwerk-Schnittstellen und ist daher für den Anfang am sichersten einzustellen. |
<VirtualHost>Für jeden Virtuellen Server wird ein eigener Block von Anweisungen eingerichtet:• Die Konfiguration muss mindestens 2 solcher Blöcke enthalten: Der erste ersetzt den Standard-Server (hier auf Port 80), der zweite beschreibt den ersten virtuellen Server (hier auf Port 8080). |
DocumentRootbezeichnet den Pfad zum Verzeichnis der verwalteten Dokumente (wo sich zumindest eine Start-Datei index.html befinden muss).● Für den ersten virtuellen <VirtualHost> kopieren sie am besten jene Anweisung, die schon bisher das DocumentRoot Verzeichnis des Haupt-Servers definierte. ● Das DocumentRoot Verzeichnis des zweiten <VirtualHost> sollte sich davon unterscheiden, damit sie die korrekte Funktion testen können. Ändern sie den Verzeichnis-Namen so, dass er mit dem vorbereiteten Dokumente-Verzeichnis für den virtuellen Server genau übereinstimmt. |
Alle weiteren Anweisungenfür den ersten <VirtualHost> werden am besten vom bisherigen Haupt-Server kopiert. Schließlich soll er sich genauso verhalten wie der bisherige Server.● Auch für den zweiten <VirtualHost> kann man die gleichen Anweisungen verwenden: Man muss nur jene Direktiven ändern, die sich anders verhalten sollen, z.B. getrennte Log-Dateien für die beiden Server. |
<Directory>● Normalerweise ist das Dokumente-Verzeichnis des Haupt-Servers bereits eingerichtet. Dieser Block kann daher im ersten <VirtualHost> entfallen.● Für jeden weiteren <VirtualHost> wird sein jeweiliges Dokumente-Verzeichnis in einem eigenen <Directory>-Block eingerichtet: Darin werden vor allem die Zugangs-Rechte definiert: Ersetzen sie die angegebene Adresse 192.168.0.0 durch die Basis-Adresse ihres eigenen Netzwerks. • Achten sie darauf, dass der im <Directory>-Block angegebene Pfad genau mit jenem der vorangehenden DocumentRoot-Anweisung übereinstimmt. |
KontrolleDamit ist die Konfiguration abgeschlossen.Kontrollieren sie nochmals die Konfigurations-Datei: Die häufigsten Fehler sind kleine Ungenauigkeiten in den Angaben. |
Erster TestNun sollte der virtuelle Server wie geplant arbeiten.● Führen sie einen Neustart des Webservers durch. ● Fordern sie von ihrem Server über beide Ports Dokumente an. ● Löschen sie vor jedem Test den Cache-Speicher ihres Browsers ! Anforderung von Dokumenten (hier index.html) über verschiedene Ports:
http://192.168.0.1/index.html
Ersetzen sie die angegebene Adresse durch den Namen oder die IP-Adresse
ihres eigenen Servers.
http://192.168.0.1:8080/index.html |
HTML-Hyperlinks:In relativ adressierten Links (zu Webseiten des gleichen (virtuellen) Servers) brauchen sie den Port nicht anzugeben.In absolut adressierten Links (zu anderen Servern, d.h. die mit http:// beginnen) müssen sie den Port nur dann angeben, wenn sie einen Port ungleich 80 verwenden. Weitere Tests:Wenn der virtuelle Server korrekt funktioniert, werden die Tests auf alle verlangten Funktionen ausgeweitet, z.B. Perl, PHP, Python, ... |
Individuelle PHP-Konfiguration |
|
|
In der Praxis tritt oft der Fall ein, dass die Programmiersprache
→ PHP
für verschiedene Anwendungen individuell konfiguriert werden soll. Ein typisches Beispiel ist die Fehler-Behandlung: Für die Entwicklung eigener Webseiten sollen alle Fehler angezeigt werden. Bei Verwendung komplexer Server-Programm-Pakete muss man die leider durchaus häufigen Fehler-Meldungen unterdrücken. |
Virtuelle Server erlauben eine elegante Lösung dieser und ähnlicher
Anforderungen: Für jede Gruppe von Anwendungen wird ein eigener
virtueller Webserver eingerichtet und passend konfiguriert. Da jedoch von jedem virtuellen Server das gleiche PHP-Interpreter Programm verwendet wird, bleibt das Problem der gewünschten unterschiedlichen PHP-Konfiguration. |
PHPRCFür jeden virtuellen Webserver wird eine eigene Umgebungs-Variable PHPRC angelegt.Ihr Wert enthält einen Pfad - normalerweise zu einem Verzeichnis innerhalb des jeweiligen DocumentRoot Verzeichnisses. • Wenn das angegebene Verzeichnis existiert und wenn sich darin eine PHP Konfigurations-Datei php.ini befindet, dann wird sie zur Konfiguration von PHP für diesen virtuellen Server verwendet. Die Methode verlangt eine vollständige eigene Konfigurations-Datei. • Wenn Verzeichnis oder Datei nicht existieren, dann wird ohne weitere Meldungen die Standard PHP Konfiguration verwendet. |
Diese Anweisungen sind in der Konfiguration jedes einzelnen virtuellen Servers enthalten.
<IfModule mod_env.c>
Der angegebene Pfad ist in jedem virtuellen Server verschieden.SetEnv PHPRC /home/test/html/php_rc
<IfModule>
Diese Methode wird vor allem von Web Providern verwendet: Das angegebene Verzeichnis liegt typisch im home Verzeichnis des jeweiligen Web-Provider Kunden und ist daher für diesen selbst zugänglich. Jeder Kunde kann damit bei Bedarf seine eigene PHP Konfiguration einrichten. |
Apache-Modul php5Mit fast jedem Apache Webserver wird auch das Apache PHP-Modul als PHP Interpreter installiert. Dieses Modul bietet die Möglichkeit, die vorhandene PHP Standard-Konfiguration zu modifizieren.Die Methode setzt eine funktionierende PHP Standard-Konfiguration voraus und kann jede einzelne Konfigurations-Variable ändern. Mit Hilfe der Anweisungen php_value, php_flag, php_admin_value, php_admin_flag kann man jede Variable der PHP-Konfiguration (nachträglich) in der Apache-Konfiguration ändern. |
Diese Anweisung ist in der Konfiguration jedes virtuellen Servers enthalten, dessen PHP-Verhalten vom vorgegebenen Standard abweichen soll:
<IfModule mod_php5.c>
php_value display_errors off
<IfModule>
Diese Methode wird z.B. dazu eingesetzt, um die bei großen Server-Programm-Paketen unerwünschten PHP Feher-Meldungen abzuschalten. Derartige Pakete werden auf einam anderen virtuellen Server betrieben als die selbst hergestellten Programme. |
ini_setNur zur Vollständigkeit wird erwähnt, dass man die PHP Konfiguration in jedem einzelnen PHP Script-Programm ändern kann.Die Wirkung ist allerdings auf ein einzelnes Dokument begrenzt. |
Beispiel: Änderung der Fehler-Anzeige mit der
PHP-Funktion ini_set ini_set('display_errors','on');
Diese Methode wird nur selten eingesetzt. Wenn die Konfiguration für eine große Anzahl von PHP Programmen geändert werden soll, dann betreibt man diese besser auf einem eigenen virtuellen Server mit entsprechender PHP-Konfiguration. |