Virtuelle Server

Zusätzliche Virtuelle Apache-Server

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.

Hinweise finden sie in der integrierten Apache Dokumentation ihres eigenen Servers (http://localhost/manual), in der Online Doku und in zahlreichen Internet Artikeln zum Stichwort VirtualHost.

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.

DocumentRoot

Normalerweise 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
C:\wv1\htdocs
Vorsicht: Verzeichnisse mit unsauberen Namen (Leerzeichen, Umlaute, ...) sind unbrauchbar, z.B.
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.

Dokumente

Im 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>
<h1>Virtueller Webserver</h1>
</html>
Diese Datei wird - nur zum Test - direkt (z.B. Menü Datei | Öffnen) mit einem Browser geöffnet. Sie muss problemlos angezeigt werden.

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.

Firewall

Auf 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 !

Konfiguration

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

Apache Konfiguration

Die - urprünglich einzige, jetzt zentrale - Apache Konfigurations-Datei httpd.conf ist im Laufe der Zeit so angewachsen, dass sie (zu) groß und unübersichtlich wurde.

Unabhängig davon werden auf Linux Teile der Apache-Konfiguration vom Betriebssystem und von Dienstprogrammen automatisch erstellt.
Es ist nicht sinnvoll, diese Text-Dateien zu ändern, da sie evtl. überschrieben werden.

In diesem Kapitel wird gezeigt, wie man die Apache-Konfiguration übersichtlich und flexibel einrichtet, bevor ein tiefer Eingriff wie ein zusätzlicher virtueller Server vorgenommen wird.
Daher ist heute die Apache-Konfiguration auf mehrere Text-Dateien aufgeteilt. Es ist für AnfängerInnen schwierig, darin eine Vereinfachung zu erkennen. In der Praxis hat sich dieses System jedoch ausgezeichnet bewährt.

Der Start erfolgt immer mit der Datei httpd.conf
Sie müssen diese Datei auf ihrem Server finden, z.B.
/etc/apache/httpd.conf
C:\Programme\Apache...\conf\httpd.conf
In dieser Text-Datei sind Include-Anweisungen enthalten. Damit werden die angegebenen Dateien zusätzlich in die Konfiguration eingebunden.
# Include-Anweisungen mit vorangestelltem # Zeichen sind abgeschaltet !

Individuelle Konfiguration:

Die automatisch (oder vom Betriebssystem) erstellten Konfigurations-Dateien werden so wenig wie möglich verändert.

Individuelle Anweisungen werden in eigenen Text-Dateien *.conf sinnvoll zusammengefasst.

Alle eigenen Konfigurations-Dateien - insbesondere für virtuelle Webserver - werden in einem speziell dafür neu angelegten Verzeichnis zusammengefasst.

Damit werden die automatisch angelegten von den individuellen Anweisungen sauber getrennt. Die Standard-Anweisungen werden zuerst ausgeführt, die individuellen zuletzt: So kann man jede bereits erfolgte Anweisung in der eigenen Konfigurations-Datei überschreiben.

Die Trennung hat insbesondere den Vorteil, eigene Anweisungen zu schützen: Die Dateien der individuellen Konfiguration bleiben bei einem Update von System oder Apache Server unverändert.

In den folgenden Absätzen wird gezeigt, wie diese Art der individuellen Konfiguration organisiert wird.

Privates Verzeichnis   myconf

Legen sie für eigene Konfigurations-Dateien ein eigenes Verzeichnis (in diesem Beispiel myconf) an, und zwar innerhalb jenes Verzeichnisses, in welchem sich httpd.conf befindet.
Legen sie parallel dazu ein leeres Verzeichnis abgeschaltet an.

Beispiel Linux:
/etc/apache/myconf
/etc/apache/abgeschaltet

Beispiel Windows:
C:\Programme\Apache...\conf\myconf
C:\Programme\Apache...\conf\abgeschaltet

Übersiedlung

Wenn sie bereits eigene Konfigurations-Dateien angelegt haben, dann verschieben sie diese in das private Verzeichnis (myconf).

Beispiele:
/etc/apache/myconf/php.conf
/etc/apache/myconf/ssi.conf
/etc/apache/myconf/virtual.conf

Include

Öffnen sie die zentrale Apache Konfigurations-Datei httpd.conf
Suchen sie alle Include-Anweisungen, die zu selbst angelegten Dateien führen:
Schalten sie einzelne alte Include-Anweisungen mit einem vorangestellten # Zeichen ab:
# Include alter_pfad.conf

Fügen sie am Ende (!) der Datei httpd.conf diese Anweisung ein:
Include conf/myconf/*.conf
Damit werden alle im Verzeichnis myconf enthaltenen Konfigurations-Dateien eingebunden.
Um eine bestimmte Optionein- oder auszuschalten, verschiebt man die betreffende Datei einfach in ein anderes Verzeichnis.

Einschalten

Um einen bestimmten Teil der Apache-Konfiguration (z.B. den virtuellen Server) einzuschalten, wird die betreffende Konfigurations-Datei einfach in das Verzeichnis myconf verschoben.

Abschalten

Um eine Konfiguration abzuschalten, wird die Datei in das Verzeichnis abgeschaltet verschoben.

Beispiel für eine eingeschaltete Konfigurations-Datei:
/etc/apache/myconf/virtual.conf

Beispiel für eine abgeschaltete Konfigurations-Datei:
/etc/apache/abgeschaltet/leider_nein.conf

Server-Neustart

Nach jeder Änderung der Konfiguration muss der Webserver neu gestartet werden.
Dazu muss das Betriebssystem nicht abgeschaltet werden.
Der Neustart erfolgt normalerweise innerhalb von 5..15 Sekunden.
Wenn dabei ein Fehler auftritt, schaltet man die geänderte Konfigurations-Datei einfach ab und fährt den Server ohne sie wieder hoch.
Die maximale Unterbrechung dauert auf diese Weise < 1 Minute.

Apache-Neustart auf Linux:
Man verwendet Shell-Scripts für Start, Stop und Restart. Je nach Betriebssystem kann das Script in unterschiedlich benannten Dateien liegen. Beispiel (ersetzen sie evtl. apache durch apache2 oder httpd):
# /etc/init.d/apache status
# /etc/init.d/apache restart

Apache-Neustart auf Windows:
Man verwendet den Apache-Monitor im System-Tray (ganz rechts unten) mit Befehl Restart:
Alternativ kann man Konsolen-Programme (z.B. NET) oder den Service Manager (services.msc) verwenden.

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änkungen

Diese 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.conf

Der Ausgangspunkt zur Apache Konfiguration ist die Datei httpd.conf
In 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.

Listen

Suchen 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-Test

Zu 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
http://192.168.0.1:8080/index.html
Ersetzen sie die angegebene Adresse durch den Namen oder die IP-Adresse ihres eigenen Servers.
Jedes vom Webserver verwaltete Dokument muss sich unter beiden Ports öffnen lassen.

Konfigurations-Datei   virtual.conf

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

Wenn sie den Apache Webserver so konfiguriert haben, wie auf dieser Seite empfohlen, dann wird die neue Konfigurations-Datei ab dem nächsten Neustart des Webservers automatisch geladen !
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 *:80
NameVirtualHost *:8080

# Haupt-Server:
<VirtualHost *:80>
ServerAdmin admin@mymail
DocumentRoot "/srv/www/htdocs"
# DocumentRoot "C:/web/htdocs"
ServerName mysrv:80
ErrorLog logs/error.log
CustomLog logs/access.log common
</VirtualHost>

# Server auf Port 8080:
<VirtualHost *:8080>
ServerAdmin admin@mymail
DocumentRoot "/srv/wv1/htdocs"
# DocumentRoot "C:/wv1/htdocs"
ServerName mysrv:8080
ErrorLog logs/verror.log
CustomLog logs/vaccess.log common
<Directory "/srv/wv1/htdocs">
AllowOverride All
Order allow,deny
Allow from localhost
Allow from 192.168.0.0/255.255.255.0
</Directory>
</VirtualHost>
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.

NameVirtualHost

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

DocumentRoot

bezeichnet 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 Anweisungen

fü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.

Kontrolle

Damit ist die Konfiguration abgeschlossen.
Kontrollieren sie nochmals die Konfigurations-Datei: Die häufigsten Fehler sind kleine Ungenauigkeiten in den Angaben.

Erster Test

Nun 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
http://192.168.0.1:8080/index.html
Ersetzen sie die angegebene Adresse durch den Namen oder die IP-Adresse ihres eigenen Servers.

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.

PHPRC

Fü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>
SetEnv PHPRC /home/test/html/php_rc
<IfModule>
Der angegebene Pfad ist in jedem virtuellen Server verschieden.

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   php5

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

Dies ist auf einem eigenen Webserver meist die beste Technik zur individuellen PHP Konfiguration mehrerer virtueller Server.

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_set

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