Einrichten eines virtuellen Hosts per Apache-HTTP-Server ======================================================== Anstelle des HTTP-Webservers vom Internetprovider kann der eigene PC als Test-Server fungieren, um z.B. die Webseite so zu testen, als wäre sie gerade online auf dem Webserver. Der Hobbyprogrammierer will u.a. kostengünstig testen, also bieten sich die kostenlosen HTTP-Server an, die einen virtuellen Host anhand eines beliebigen Ordners auf der Festplatte erzeugen können, wobei Local Host (127.0.0.1) als virtueller Host einrichtbar sein muss (der nicht von der Firewall-Software des PC allein verwaltet sein darf) und die zu testende Webseite im Browser per Domainnamen aktivierbar sein muss (anstelle der Eingabe von 127.0.0.1). Man google, um festzustellen, welche Produkte diesen Kriterien entsprechen. - Abkürzend fällt die Wahl nicht zufällig auf den HTTP-Server von Apache (www.apache.org), welcher ziemlich schwierig zu konfigurieren ist, wenn mehr als nur localhost genutzt werden soll (Für Hobbyzwecke reicht localhost aus). Der Hobbyprogrammierer, welcher für den Microsoft Internet Explorer (ab IE 7 heißt der Windows Internet Explorer) in seinen Varianten je nach Windows-Version programmieren will, wird definitiv folgende Probleme bekommen: Microsoft lässt u.a. die Installation des Internet Explorers in parallelen Versionen nicht zu, obwohl Browserversionen nachweislich nicht kompatibel sind und Microsoft Browserversionen innerhalb Windowsversionen supportet werden. Daher benötigt man pro Version des Internet Explorers eine Windows-Installation. Pro Windows-Installation wird eine Windows-Lizenz fällig, auch wenn auf anderer Festplatte am ansonsten identischen PC installiert wird (Windows- Online-Update erkennt solche Doppelversionen und verweigert den Support). Auch wer Windows unter VM emulieren will (oder auf Apple mit Intel-Technik Windows parallel mit Apple nutzen will) , benötigt eine Lizenz. Mit anderen Worten: Auch wenn die Mehrfachinstallation nicht parallel nutzbar wäre, sondern immer nur genau 1, will Microsoft Geld haben - nicht umsonst ist Microsoft-Chef so beliebt wie reich und nicht umsonst migrieren immer mehr IT- Anwender zu Linux-Derivaten, die fast identische Browser bezüglich Windows haben. Ergo, der Hobbyprogrammierer wird wohl sämtliche Bekannte mit Testwünschen nerven, oder illegal testen, oder auf andere Browser-Hersteller und deren HTML- sowie Script-Versionen ausweichen, die nicht nur Parallelinstallationen des Browsers zulassen (z.B. Opera unter Windows), sondern auch noch ziemlich gut kompatibel sind (weil identische Scriptmaschine nutzend). Dass Microsoft eventuell keinen kostenlosen HTTP-Server anbietet (der ansonsten auch noch Javascript, Active-X- Control- Aufrufe per Script, DirectX-Zugriff kennen müsste), ist das kleinere - vorallem lösbarere Problem: Eben ohne Microsoft. Pfade für Dateien im Script einer Webseite, die per HTTP-Server oder lokal von Festplatte gestartet wird: Relative Pfade per '..' sind unabhängig davon, wie die Wurzel (Root) der Webseite heißt. Absolute Pfade sind abhängig davon, wie die Wurzel (Root) der Webseite heißt. Wird die Webseite (z.B. www.testseite.de) von einem HTTP-Server gestartet, dann sind absolute Pfade bezüglich http://www.testseite.de möglich, wobei http://www.testseite.de die Root der Webseite darstellt. (Achtung: Auf einem HTTP-Server des Internetproviders liegt die Webseite natürlich auch auf einer Festplatte, also dort in einem Ordner. Dieser Ordner muss also mit www.testseite.de logisch verbunden sein - wie, das teilt der Internet-Provider mit. Tipp: Namen des Ordners auf der Festplatte des Internet-Providers kann man genauso nennen wie den des Ordners auf der lokalen Festplatte des PC. Ordnernamen mit Pfadzeichen wie ':' oder '//' sind natürlich nicht erlaubt) Wird die Webseite (z.B. www.testseite.de) von lokaler Festplatte aus gestartet, dann sind absolute Pfade bezüglich http://www.testseite.de nicht möglich, da es solchen Ordnernamen nicht geben kann. Festplattenordner möglich z.B. c:\testseite\ Will man die Webseite identisch verwalten, egal ob man die Webseite von einem HTTP-Server oder von lokaler Festplatte aus startet, dann schaue man sich folgendes Beispiel für www.testseite.de an, das allerdings mit JavaScript oder JScript realisiert wird. Der Festplattenordner ist c:\testseite. var BrowserAufOnlinePruefen=true; // false für Browser nicht auf online prüfen // online: Webseite wurde auf HTTP-Server aktiviert var DomainOhneHTTP='www.testseite.de'; // Host der Webseite ohne http:// und ohne Port var BrowserIstOnline=false; // Annahme: Browser ist nicht online var PfadDerDateien=''; // Annahme: Browser ist nicht online also // alle Pfade unterhalb von c:\testseite\ // wobei die Startdatei index.html der // Webseite eben in diesem Ordner liegt if(BrowserAufOnlinePruefen) // wenn auf online geprüft werden soll {if(window.location.hostname!=null); // aktuell gefundener Host BrowserIstOnline=(window.location.hostname== DomainOhneHTTP);} // Host www.xxx.yyy prüfen auf aktuelle gefundenen Host // true so Browser online } if(BrowserIstOnline) {PfadDerDateien='http://' + DomainOhneHTTP;} // Pfad wenn Browser online ist: Alle Pfade unterhalb von // http://www.testseite.de // Für den HTTP-Server liegt die Webseite natürlich // auf einer Festplatte, also dort in einem Ordner. // Jeder Pfad in der Webseite wird in den Ordnerpfad // der Festplatte automatisch konvertiert (HTTP zu // Festplatte per Dienst: Daher der Name HTTP- // Server) Nachfolgend die beispielhafte Einrichtung einer Webseite per Apache-HTTP-Server 2.2.2 bis 2.2.4. unter Windows XP ab SP 1: Webseitendomain heißt www.testseite.de mit index.html als Startdatei Festplattenordner der Domain, die als virtueller Host über localhost (also 127.0.0.1) laufen soll c:\testseite\ Apache wurde installiert unter e:\wxp\apache\ wobei gelten muss DNS-Dienst von Windows muss aktiv sein (in der Regel ist der Dienst automatisch aktiv) Installationstyp All Users, on Port 80, as a Service - Recommended Domain und Servername 127.0.0.1 (nicht localhost kodieren) Email beliebig@localhost Mit der Installation wird der Dienst-Monitor von Apache bei Windowsstart ebenfalls starten. Es wird Apache als permanenter Dienst eingerichtet, der über den Dienst-Monitor von Apache aktivierbar / deaktivierbar ist. Es sind zwar mehrere Apache-Dienste einrichtbar, aber genau 1 kann nur immer aktiv sein. Apache-Software einrichten: Dienst-Monitor von Apache: siehe oben aber: Da in Windows für jeden Aufruf der Webseite www.testseite.de unter Apache eine Einstellung getroffen werden muss, empfiehlt es sich, den Apache-Dienst grundsätzlich manuell zu starten und zu stoppen anhand nachfolgend vorgestellter BAT-Dateien. Dafür muss aber einmalig folgendes eingestellt werden: Der Apache-Dienst-Name ist per Dienst-Monitor zu sehen (und der Status ob aktiv oder deaktiv). Dienste sind unter Windows per Systemsteuerung-Verwaltung-Dienste verwaltbar (auch per Apache-Monitor ist die Dienstverwaltung aktivierbar). Der Apache-Dienst muss zuerst deaktiviert werden, dann auf Starttyp manuell gesetzt werden: Mit Windows-Start startet der Dienst nicht automatisch. Windows anpassen an den Virtuellen Host Die Anpassung erfolgt so, dass Apache per Batch-File, die unten erklärt werden, gestartet und deaktiviert wird (Batch-Files sind passend zur Anpassung von Windows). Unter c:\windows\system32\drivers\etc\ liegt die Datei hosts Copyright (c) 1993-1999 Microsoft Corp. # # Dies ist eine HOSTS-Beispieldatei, die von Microsoft TCP/IP # für Windows 2000 verwendet wird. # # Diese Datei enthält die Zuordnungen der IP-Adressen zu Hostnamen. # Jeder Eintrag muss in einer eigenen Zeile stehen. Die IP- # Adresse sollte in der ersten Spalte gefolgt vom zugehörigen # Hostnamen stehen. # Die IP-Adresse und der Hostname müssen durch mindestens ein # Leerzeichen getrennt sein. # # Zusätzliche Kommentare (so wie in dieser Datei) können in # einzelnen Zeilen oder hinter dem Computernamen eingefügt werden, # aber müssen mit dem Zeichen '#' eingegeben werden. # # Zum Beispiel: # # 102.54.94.97 rhino.acme.com # Quellserver # 38.25.63.10 x.acme.com # x-Clienthost 127.0.0.1 localhost Diese Datei verwaltet -wie man sieht - auch den localhost. Standardgemäß ist localhost auf 127.0.0.1 gelegt (nur deswegen sind localhost und 127.0.0.1 synonym) Soll aber die Webseite www.testseite.de über 127.0.0.1 gestestet werden, muss also die Zeile 127.0.0.1 localhost ersetzt werden durch 127.0.0.1 www.testseite.de Nach dem Test muss localhost wieder für 127.0.01 verfügbar gemacht werden, also der Standard gesetzt werden. Genau dieses Ersetzen machen die Batch-Files siehe unten. Dafür benötigen sie nur 2 neue Ordner, die einmalig mit Inhalt manuell angelegt werden müssen in c:\windows\system32\drivers\etc\ Schritt 1: Ordner c:\windows\system32\drivers\etc\\_hosts_standard\ manuell erzeugen, und dorthin die bisher unveränderte, also originale hosts-Datei kopieren (Datei enthält 127.0.0.1 localhost) # Die IP-Adresse und der Hostname müssen durch mindestens ein # Leerzeichen getrennt sein. # # Zusätzliche Kommentare (so wie in dieser Datei) können in # einzelnen Zeilen oder hinter dem Computernamen eingefügt werden, # aber müssen mit dem Zeichen '#' eingegeben werden. # # Zum Beispiel: # # 102.54.94.97 rhino.acme.com # Quellserver # 38.25.63.10 x.acme.com # x-Clienthost 127.0.0.1 localhost Schritt 2 Ordner c:\windows\system32\drivers\etc\_hosts_mit_www_testseite_de\ manuell erzeugen, und dorthin die bisher unveränderte, also originale hosts-Datei kopieren (Datei enthält 127.0.0.1 localhost) dann diese Datei in diesem Ordner per notepad.exe (nicht Word etc.) auf 127.0.0.1 www.testseite.de # Copyright (c) 1993-1999 Microsoft Corp. # # Dies ist eine HOSTS-Beispieldatei, die von Microsoft TCP/IP # für Windows 2000 verwendet wird. # # Diese Datei enthält die Zuordnungen der IP-Adressen zu Hostnamen. # Jeder Eintrag muss in einer eigenen Zeile stehen. Die IP- # Adresse sollte in der ersten Spalte gefolgt vom zugehörigen # Hostnamen stehen. # Die IP-Adresse und der Hostname müssen durch mindestens ein # Leerzeichen getrennt sein. # # Zusätzliche Kommentare (so wie in dieser Datei) können in # einzelnen Zeilen oder hinter dem Computernamen eingefügt werden, # aber müssen mit dem Zeichen '#' eingegeben werden. # # Zum Beispiel: # # 102.54.94.97 rhino.acme.com # Quellserver # 38.25.63.10 x.acme.com # x-Clienthost 127.0.0.1 www.testseite.de Virtual-Host genau 1x einrichten in e:\wxp\apache\conf\ dort in der Datei httpd.conf erst httpd.conf kopieren in einen Sicherungsordner freier Wahl dann per notepad.exe (nicht per Word etc.) am Ende der httpd.conf folgenden Text einfügen Achtung: Es muss natürlich dann www.testseite.de ersetzt werden durch zu testende Domain c:/testseite ersetzt werden durch den wirkliche Pfad # Virtual Host für www.testseite.de auf 127.0.0.1:80 gehostet # ERST Virtual Host für den Server, der damit alle Servernamen ungleich www.testseite.de abfängt # also Angaben aus Serverinstalltion verwendet NameVirtualHost 127.0.0.1 ServerName localhost ServerAlias 127.0.0.1 DocumentRoot e:/wxp/apache/htdocs ErrorLog e:/wxp/apache/logs/error.log TransferLog e:/wxp/apache/logs/access.log ScriptAlias /cgi-bin/ e:/wxp/apache/cgi-bin/ # Virtual Host für www.testseite.de ServerName www.testseite.de ServerAlias 127.0.0.1 DocumentRoot c:/testseite DirectoryIndex index.html ErrorLog c:/testseite\apache_error.log TransferLog c:/testseite\apache_access.log Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow from all Apache-Start und Stop per folgender BAT-Dateien, die z.B. in C:\ liegen (egal wo auf Festplatte): Achtung: Falls der Start von Apache wegen nicht vorhandenem Dienst nicht erfolgen kann, dann gilt: Mit der Apache-Installation wurde ein Dienst eingerichtet: siehe oben. Nur leider, der Apache-Start verlangt einen weiteren Dienst mit anderem Namen. Da bekannt ist, dass aber nur 1 Dienst zu jedem Zeitpunkt aktiv sein kann, ist es seht verwunderlich, wieso Apache-Start den bereits vorhandenen Dienst nicht nimmt. Anstelle von wundern bitte folgendes genau 1 mal ausführen: e:\wxp\apache\bin\ httpd.exe -k install im bin-Verzeichnis liegen die ausführbaren Dateien von Apache. httpd.exe ist die Hauptkomponente von Apache. -k install installiert einen weiteren Apache-Dienst. Logischerweise ist dieser Dienst analog zum Dienst, der bei Apache-Installation erzeugt wurde, ebenfalls per Dienste-Verwaltung zu deaktivieren und auf Starttyp manuell zu setzen. Dieser neue Dienst hat aber den passenden Namen, der vom Start von Apache akzeptiert wird. Hier ein Beispiel für den Dienste-Wirrwarr: Apache-Installation erzeugt Dienst 'Apache2.2'. Apache-Start will aber den Dienst 'Apache 2' Batch-File 'ApacheStarten.bat' für Start des Apache, wobei der Dienst 'Apache2' aktiviert wird @echo off cls echo Apache als Anwendung starten bei inaktivem Apache-Dienst 'Apache2' echo (Apache-Dienst darf nicht bei Windows-Start aktiv sein) echo (Apache stoppen immer per ApacheStoppen.bat) echo hosts-Datei mit www.testseite.de bereitstellen echo. copy /V /Y C:\WINDOWS\system32\drivers\etc\_hosts_mit_www_testseite_de\hosts C:\WINDOWS\system32\drivers\etc\hosts > NUL e:\wxp\apache\bin\httpd.exe -k start echo. echo. echo ..... Apache-Anwendung wurde nur gestartet, wenn oben keine echo Fehlermeldung angezeigt wurde ! echo Falls Fehlermeldung dann im Monitor Apache Servers echo zu allen Eintraege STOP-Button klicken (falls klickbar) echo und Batch-File neu starten echo. echo. echo Apache kann keine ActiveX durchreichen (z.B. Logox WebSpeech) echo per JScript-erzeugte Popups nicht immer korrekt rendern echo. echo. pause echo. echo. echo aktuelle hosts-Datei lautet echo. type C:\WINDOWS\system32\drivers\etc\hosts echo. pause Batch-File 'ApacheStoppen.bat' für Start des Apache, wobei der Dienst 'Apache2' de-aktiviert wird @echo off cls echo Apache als Anwendung stoppen bei aktiven Apache-Dienst 'Apache2' echo (Apache-Dienst aktiviert per ApacheStarten.bat) echo hosts-Datei ohne www.testseite.de bereitstellen echo. copy /V /Y C:\WINDOWS\system32\drivers\etc\_hosts_standard\hosts C:\WINDOWS\system32\drivers\etc\hosts >NUL e:\wxp\apache\bin\httpd.exe -k stop echo. echo. echo ..... Apache-Anwendung wurde nur gestoppt, wenn oben keine echo Fehlermeldung angezeigt wurde ! echo Falls Fehlermeldung dann im Monitor Apache Servers echo dann war kein Appache-Server aktiv. echo. echo. pause echo. echo. echo aktuelle hosts-Datei lautet echo. type C:\WINDOWS\system32\drivers\etc\hosts echo. pause Batch-File 'ApacheHostsDateiAnzeigen.bat' für Anzeige der hosts-Datei @echo off cls echo aktuelle hosts-Datei anzeigen echo. type C:\WINDOWS\system32\drivers\etc\hosts echo. echo. echo. pause Webseite aktivieren per Apache: Da die Webseite nur per o.g. Batch-Dateien gestartet bzw. gestoppt werden kann, kann der Apache-Dienst- Monitor nur noch zur Kontrolle benutzt werden, ob eine Apache-Dienst aktiv ist. Schritt 1: Vor dem Start der Webseite darf kein Apache-Dienst aktiv sein Schritt 2 ApacheHostsDateiAnzeigen.bat aktivieren. Die hosts-Datei muss enthalten 127.0.0.1 localhost Schritt 3: ApacheStarten.bat aktivieren. Apache startet. Wer will kann jetzt Schritt 2 wiederholen und sieht dann 127.0.01. www.testseite.de Wenn jetzt die Firewall-Software sich meldet, dann Apache erlauben am Port 80 (also HTTP) von 127.0.0.1 Achtung: Nutzt die zu testende Webseite andere Ports z.B. die von Plugins, dann können die Plugins selbst einen Firewalleintrag verlangen, aber Apache kann natürlich nur HTTP (Port 80) und muss nur zwischen Webseite und den Plugins vermitteln (eben über Port 80) Schritt 4: Browser der Wahl aktivieren Dort die Domain www.testseite.de eintippen .... die Webseite öffnet sich anhand c:\testseite\index.html Tipp: Sollte die Webseite bereits auf einem Webserver online sein, dann würde ohne Apache-Start natürlich die online-Variante aktiviert werden und nicht die Webseite von der Festplatte aus dem Ordner c:\testseite ! Wichtig: Sollte die Webseite im Ordner c:\testseite\ geändert worden sein, so muss der Browser-Cache gelöscht werden, bevor die die Webseite erneut aktiviert wird. Apache lässt den Browser genauso agieren, als ob der online die Webseite laden würde, also über den Browser-Cache. Manche Browser oder Webseiten unterbinden dann das Neuladen einer Datei, die im Browser-Cache dem Namen nach vorhanden ist, aber in c:\testseite verändert vorliegt also zwingend neu geladen werden muss.... Ergo Browser-Cache vorher löschen. Browser-Cache im löschen im Internet Explorer per Internetoptionen, die im Browser per Menüpunkt Extra oder per Systemsteuerung aktivierbar sind (ev. Verknüpfung auf Desktop manuell erzeugen) Opera per Menüpunkt Extra-Einstellungen-Erweitert Schritt 5: Webseite getestet (man hat jetzt ein Smily-Gesicht oder graue Haare mehr, oder den Chef, Kunden, Frau am Hals *g) also Zeit zum Deaktivieren von Apache per ApacheStoppen.bat Schritt 6: Webseitendaten aus c:\testseite sichern.