Zum Erstellen und Testen von Webseiten sowie CGI-Scripts ist ein lokaler Webserver erforderlich. Um diese Dinge geht es hier (Windows XP/NT).
Nach Installation der Setup-Datei auf dem Betriebssystem finden sich alle für das Progeamm benötigten Dateien in einem lokalen Verzeichnis, Beispiel untenstehend. Es empfiehlt sich, den Webserver als Dienst einzurichten, betrachte die Ausgabe der Hilfe zu Apache.exe /?
C:\Programme\Apache Group\Apache2\bin>Apache.exe /?
Usage: Apache.exe [-D name] [-d directory] [-f file]
[-C "directive"] [-c "directive"]
[-w] [-k start|restart|stop|shutdown]
[-k install|config|uninstall] [-n service_name]
[-v] [-V] [-h] [-l] [-L] [-t] [-S]
Options:
-D name : define a name for use in <IfDefine name> directives
-d directory : specify an alternate initial ServerRoot
-f file : specify an alternate ServerConfigFile
-C "directive" : process directive before reading config files
-c "directive" : process directive after reading config files
-n name : set service name and use its ServerConfigFile
-k start : tell Apache to start
-k restart : tell running Apache to do a graceful restart
-k stop|shutdown : tell running Apache to shutdown
-k install : install an Apache service
-k config : change startup Options of an Apache service
-k uninstall : uninstall an Apache service
-w : hold open the console window on error
-e level : show startup errors of level (see LogLevel)
-E file : log startup errors to file
-v : show version number
-V : show compile settings
-h : list available command line options (this page)
-l : list compiled in modules
-L : list available configuration directives
-t -D DUMP_VHOSTS : show parsed settings (currently only vhost settings)
-S : a synonym for -t -D DUMP_VHOSTS
-t : run syntax check for config files
Von Interesse ist der Parameter Apache.exe -k install, danach ist der Webserver als Dienst in services.msc einzurichten, kann über diese GUI also gestartet und gestoppt, sowie für einen automatischen Start eingerichtet werden. Auf der Kommandozeile geht das Starten/Stoppen auch mit net start apache oder net stop apache (evntl. auch "apache2") und das natürlich auch über eine Batchdatei (.cmd oder .bat).
Die Konfigurationsdatei heißt httpd.conf und steht im Installpfad unter dem Verzeichnis /conf beispielsweise als C:\Programme\Apache Group\Apache2\conf\httpd.conf. Zum Einrichten eines lokalen Webservers empfiehlt es sich, diesen nicht global, sondern als Virtuellen Host zu konfigurieren, am Besten am Ende der Konfigurationsdatei.
Für die lokale Testumgebung wird der virtuelle Host auf die IP-Adresse 127.0.0.1 geschrieben und bekommt einen Namen, beispielsweise den "richtigen" Domänennamen jedoch ohne Top-Level-Zusatz. Selbstverständlich ist der lokale Name frei wählbar. Hier ist meine httpd.conf für einen Apache2:
NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1>
ServerName rolfrost
<Directory d:/home/local/html> #
AllowOverride all # Damit eine .htaccess funktioniert
</Directory> #
DocumentRoot d:/home/local/html
ScriptAlias /cgi-bin/ d:/home/local/html/cgi-bin/ # Für CGI-Scripts
ScriptAlias /cgi-test/ d:/home/local/html/cgi-test/ # Abschließenen Slash beachten!
</VirtualHost>
Das Verzeichnis /cgi-bin/ ist, mit dem ScriptAlias festgelegt. Dieses Verzeichnis ist nur für CGI-Scripts gedacht, die über den Server ausgeführt werden sollen. Neben CGI-Scripts sollten sich in /cgi-bin/ keine weiteren Dateien, außer Module (.pm: Perlmodul-Dateien) sowie benötigte Konfigurationsdateien befinden.
Was jetzt noch fehlt, ist die Beziehung zwischen dem IP-Stack des Betriebsystems und dem ServerName, diese wird über die Datei c:/windows/system32/drivers/etc/hosts hergestellt, folgende Zeile macht dies:
127.0.0.1 rolfrost example
Hinweis: Die Datei hosts hat keine DOS-übliche Dateierweiterung. Beim Speichern mit Notepad wird im Default die Erweiterung ".txt" hinzugefügt, um zu verhindern, dass damit die Datei unbrauchbar wird, setze beim Speichern den Dateinamen "hosts" in Anführungsstriche (im Speichern-Unter-Dialog).
Vor dem Starten des Apache-Webservers testen wir auf der Kommandozeile, ob ein ping "ServerName" funktioniert. Ist das ok, kann der Apache gestartet werden und der Browser zeigt mit http://rolfrost/ in der Adresszeile eingegeben, die Default-Seite des Webservers index.html. Beachte: Jede Änderung in der Konfiurationsdatei httpd.conf erfordert einen Neustart des Webservers und der startet nur dann, wenn in der Konfigurationsdatei keine Syntax-Fehler eingebaut wurden.
Eine Perl-Installation auf dem Rechner vorausgesetzt, können nun in Perl geschriebene CGI-Scripts lokal getestet werden. Unter XP gibt es keine Dateiattribute wie auf LINUX-Maschinen (chmod 755 gibt es nicht), jedoch spielt die erste Zeile in einem Perl/CGI-Script eine entscheidene Rolle, diese Zeile wird shebang genannt und lautet üblicherweise so:
#!/usr/bin/perl # shebang für den Webserver bei Provider
Und diese Zeile teilt dem Apache-Webserver mit, in welchem Pfad sich der Scrip-Interpreter befindet. Zum Sicherstellen der Funktionalität der shebang erzeugen wir auf dem selben Laufwerk, wo der Apache installiert ist, das Verzeichnis/Unterverzeichnis c:/usr/bin (also auf Laufwerk c:) und legen dort eine Kopie der Datei perl.exe an. Ansonsten verbleiben alle Dateien, die zur Perl-Installation gehören, dort wo sie sind.
Nach dem Hochladen eines Perl/CGI-Scripts zum Webserver beim Provider muss die shebang nicht geändert werden. Jetzt ist es an der Zeit ein Scipt zu schreiben für den ersten Test, untenstehendes Perl/CGI-Script gibt die CGI-Umgebung des Webservers aus:
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
while( ($k,$v) = each %ENV){
printf("%-25s %s\n", $k, $v);
}
# Script umg.cgi im Verzeichnis /cgi-bin/
# Aufruf: http://example/cgi-bin/umg.cgi
Die CGI-Umgebung, das ist eine Sammlung an Variablen, die Perl im hash %ENV findet. Dieser Hash gilt im gesamten Namensraum zur Laufzeit eines Perl-Scripts einschließlich innerhalb aller geladenen Module.
Manchmal besteht die Aufgabe, Scripts auch außerhalb /cgi-bin/ starten zu können, Scripts mit der Dateierweiterung .cgi oder .pl. Dieses Feature wird wie folgt enabled:
AddHandler cgi-script .pl .cgi Options +ExecCGI
Obenstehender Eintrag kann in der httpd.conf erfolgen oder in einer Datei namens .htaccess im DOCUMENT_ROOT des Webservers. Bei einem Eitrag in die .htaccess muss der Webserver nicht neu gestartet werden, zum Testen kopieren wir das Script umg.cgi neben die index.html außerhalb des Verzeichnis /cgi-bin/ und rufen es in der Adresszeile des Browsers auf: http://example/umg.cgi, es sollte genauso funktionieren wie im Verzeichnis /cgi-bin/ und den Hash %ENV ausgeben.
Sofern für bestimmte Dateien/Scripts eine Basic Authentication (Abfrage Passwort) realisiert werden soll, wird eine .htaccess sowie eine Passwort-Datei benötigt. Betrachten wir zunächst die Datei .htaccess:
AuthUserFile /home/local/html/.htpassfile
AuthName "Secret Realm"
AuthType Basic
order deny,allow
<Files ~ "script_a.cgi|script_b.cgi">
require valid-user
</Files>
Feilich wäre es schön, wenn eine solche .htaccess unverändert sowohl auf dem lokalen Webserver als auch auf dem Server des Providers funktioniert, damit diese vor dem Hochladen mit FTP oder SCP nicht jedesmal geändert werden muss, denn der Pfad zur Passwortdatei AuthUserFile muss ein absoluter Pfad sein und der beinhaltet auf Betriebsystemen XP/NT bekanntlich einen Laufwerksbuchstaben, beim Provider hingegen nicht.
Trick: Die Angabe des Laufwerkbuchstaben kann entfallen, wenn sich die Passwort-Datei (hier .htpassfile) auf dem Laufwerk befindet, auf welchem sich die Programmdateien für den Apache-Webserver befinden, beispielsweise auf Laufwerk c:.
Mit der oben gezeigten .htaccess erscheint beim Aufruf der Scripts script_a.cgi, script_b.cgi vom Browser her der bekannte Dialog zum Eingabe von Benutzername und Passwort. Zum Erzeugen der Passwortdatei ist mit der Installation des Apache ein Dienstprogramm mitgeliefert worden, so funktioniert es:
C:\Programme\Apache Group\Apache2\bin>htpasswd.exe /?
Usage:
htpasswd [-cmdpsD] passwordfile username
htpasswd -b[cmdpsD] passwordfile username password
htpasswd -n[mdps] username
htpasswd -nb[mdps] username password
-c Create a new file.
-n Don't update file; display results on stdout.
-m Force MD5 encryption of the password (default).
-d Force CRYPT encryption of the password.
-p Do not encrypt the password (plaintext).
-s Force SHA encryption of the password.
-b Use the password from the command line rather than prompting for it.
-D Delete the specified user.
On Windows, NetWare and TPF systems the '-m' flag is used by default.
On all other systems, the '-p' flag will probably not work.
Das Modul ist bereits in die httpd.conf eingetragen und muss nur aktiviert werden, je nach Apache-Version ist für die Zeile:
LoadModule rewrite_module modules/mod_rewrite.so
das Kommentarzeichen "#" zu entfernen und der Server neu zu starten. Windows-Versionen für den Apache-Webserver zeigen evntl. namentlich ein anderes Modul mit .dll als Dateierweiterung. Nach dem Laden des Moduls kann mit:
RewriteEngine on
die Rewrite-Engine verwendet werden.
Auch dieses Feature kann, wenn gewünscht, in der .htaccess verwirklicht werden mit folgenden Zeilen:
Options +Includes AddType text/html .shm AddHandler server-parsed .shm
In diesem Beispiel ist der Einbau von SSI an Dateien mit der Erweiterung .shm gebunden. Zum Testen kann diese Zeile in eine datei.shm eingebaut werden:
<!--#echo var="SERVER_NAME" -->
Diese Zeile gibt aus der Servumgebung den Namen des Virtuellen Hosts (Servername) aus.
Das wären die Basics, Weiterführendes finden Sie in der Dokumentation zum Apache-Webserver.
Last-Modified: Tue, 22 Jun 2010 19:50:32 GMT