Debian GNU/Linux Anwenderhandbuch | ||
---|---|---|
Zurück | Nach vorne |
Anfang 1995 war die beliebteste Server-Software für das WWW (World Wide Web) der frei verfügbare HTTP ( Hypertext Transfer Protocol) -Server „NCSA“, der von Rob McCool am National Center for Supercomputing Applications (daher der Name: NCSA), University of Illinois, Urbana-Champaign entwickelt wurde. Zu dieser Zeit fand aber schon keine weitere Entwicklung statt, da Rob McCool fast ein Jahr zuvor das NCSA verlassen hatte. Viele Webmaster entwickelten eigene Erweiterungen und beseitigten Fehler. Einige dieser Webmaster kommunizierten miteinander und koordinierten Ihre Entwicklungen in Form von sogenannten „Patches“.
Diese Vielzahl der Patches führte auch zum Namen: „A PAtCHy server“ - Apache.
Auf Basis des NCSA httpd Version 1.3 und allen verfügbaren Patches entstand im April 1995 die erste offizielle Version 0.6.2 des Apache Webservers. Bereits im Dezember 1995 wurde die Verion 1.0 veröffentlicht, die auch intern komplett überarbeitet war. Bereits ein Jahr, nachdem die Entwicklung aufgenommen wurde, konnte der Apache mehr Installationen aufweisen als der NCSA Server.
Auch wenn Sie Ihren Rechner nicht permanent am Netz betreiben, macht ein eigener Webserver auf Ihrem System Sinn. Bei der Entwicklung eigener Webseiten können Sie diese sofort „Live“ auf Ihrem System testen. Sie müssen dazu nicht die Seiten erst auf den Server Ihres Providers übertragen. Ebenso können Sie selbst geschriebene CGI-Programme gleich testen.
Die Installation von Apache können Sie wie gewohnt mit apt-get install apache durchführen. Auch dieses Paket beinhaltet ein Konfigurationscript, welches während der Installation gestartet wird. Wenn Sie Apache später neu konfigurieren möchten, können Sie das mit dem Programm apacheconfig durchführen.
sushi:~# apt-get install apache Reading Package Lists... 100% Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: apache 0 packages upgraded, 1 newly installed, 0 to remove and 246 not upgraded. Need to get 0B/356kB of archives. After unpacking 666kB will be used. Selecting previously deselected package apache. (Reading database ... 64458 files and directories currently installed.) Unpacking apache (from .../web/apache_1.3.9-10.deb) ... Setting up apache (1.3.9-10) ... Installing new configuration file /etc/apache/httpd.conf ... Installing new configuration file /etc/apache/access.conf ... Installing new configuration file /etc/apache/srm.conf ... Installing new configuration file /etc/apache/cron.conf ... Updating alias /doc/ -> /usr/doc/ in srm.conf (for Debian docs). Your config files will not be modified until you select Y at "save changes." Enter the email address of your server administrator. This address will be used in error messages allowing users to submit reports of faulty links or misconfigured cgi-programs to you. It should be an email address that corresponds to a human. Who should the ServerAdmin be? [you@your.address] fr@openoffice.de |
The DocumentRoot is set to /var/www. Installing your new homepage in /var/www. This release of the Apache server can be configured to load only certain modules into memory. This program can automagically configure Apache so only modules that are actually needed are loaded. Do you want to manually choose which modules to load? [y/N] |
Working magic...........................................done. # LoadModule vhost_alias_module /usr/lib/apache/1.3/mod_vhost_alias.so # LoadModule env_module /usr/lib/apache/1.3/mod_env.so LoadModule config_log_module /usr/lib/apache/1.3/mod_log_config.so LoadModule rewrite_module /usr/lib/apache/1.3/mod_rewrite.so # LoadModule mime_magic_module /usr/lib/apache/1.3/mod_mime_magic.so LoadModule mime_module /usr/lib/apache/1.3/mod_mime.so LoadModule negotiation_module /usr/lib/apache/1.3/mod_negotiation.so LoadModule status_module /usr/lib/apache/1.3/mod_status.so # LoadModule info_module /usr/lib/apache/1.3/mod_info.so # LoadModule includes_module /usr/lib/apache/1.3/mod_include.so LoadModule autoindex_module /usr/lib/apache/1.3/mod_autoindex.so LoadModule dir_module /usr/lib/apache/1.3/mod_dir.so LoadModule cgi_module /usr/lib/apache/1.3/mod_cgi.so # LoadModule asis_module /usr/lib/apache/1.3/mod_asis.so # LoadModule imap_module /usr/lib/apache/1.3/mod_imap.so # LoadModule action_module /usr/lib/apache/1.3/mod_actions.so # LoadModule speling_module /usr/lib/apache/1.3/mod_speling.so LoadModule userdir_module /usr/lib/apache/1.3/mod_userdir.so # LoadModule proxy_module /usr/lib/apache/1.3/libproxy.so LoadModule alias_module /usr/lib/apache/1.3/mod_alias.so LoadModule access_module /usr/lib/apache/1.3/mod_access.so LoadModule auth_module /usr/lib/apache/1.3/mod_auth.so # LoadModule anon_auth_module /usr/lib/apache/1.3/mod_auth_anon.so # LoadModule dbm_auth_module /usr/lib/apache/1.3/mod_auth_dbm.so # LoadModule db_auth_module /usr/lib/apache/1.3/mod_auth_db.so # LoadModule digest_module /usr/lib/apache/1.3/mod_digest.so # LoadModule cern_meta_module /usr/lib/apache/1.3/mod_cern_meta.so LoadModule expires_module /usr/lib/apache/1.3/mod_expires.so # LoadModule headers_module /usr/lib/apache/1.3/mod_headers.so # LoadModule usertrack_module /usr/lib/apache/1.3/mod_usertrack.so LoadModule unique_id_module /usr/lib/apache/1.3/mod_unique_id.so LoadModule setenvif_module /usr/lib/apache/1.3/mod_setenvif.so # LoadModule sys_auth_module /usr/lib/apache/1.3/mod_auth_sys.so # LoadModule put_module /usr/lib/apache/1.3/mod_put.so # LoadModule throttle_module /usr/lib/apache/1.3/mod_throttle.so # LoadModule auth_ldap_module /usr/lib/apache/1.3/auth_ldap.so # LoadModule allowdev_module /usr/lib/apache/1.3/mod_allowdev.so # LoadModule pgsql_auth_module /usr/lib/apache/1.3/mod_auth_pgsql.so # LoadModule cvs_module /usr/lib/apache/1.3/mod_cvs.so # LoadModule define_module /usr/lib/apache/1.3/mod_define.so # LoadModule eaccess_module /usr/lib/apache/1.3/mod_eaccess.so # LoadModule roaming_module /usr/lib/apache/1.3/mod_roaming.so Pondering...........................................done. Save these changes to the configuration files? [Y/n] |
Rotated `/etc/apache/httpd.conf' at Sun Jan 23 19:25:42 CET 2000. Rotated `/etc/apache/srm.conf' at Sun Jan 23 19:25:42 CET 2000. Restart Apache now? [Y/n] Stopping apache with apachectl ... Waiting for apache to terminate ...done. /usr/sbin/apachectl start: httpd started |
Wenn Sie sich näher mit dem Apache Webserver beschäftigen wollen, sollten Sie auch die Dokumentation installieren, die sich im Paket apache-doc befindet.
Unter Debian GNU/Linux befinden sich die Konfigurationsdateien des Apache unter /etc/apache/.
Apache benutzt drei Konfigurationdateien:
httpd.conf - Informationen zum Verhalten des Servers.
srm.conf - Informationen zu den Dokumenttypen
access.conf - Informationen zu den Zugriffen auf die Dokumente
Apache protokolliert alle Aktionen in zwei Logdateien, welche unter /var/log/apache/ zu finden sind:
error_log - Fehlermeldungen.
access_log - Hier werden alle übertragenen Dateien protokolliert.
Sie können den Apache als Superuser über das Script /etc/init.d/apache starten, neu starten und stoppen.
linux:/home/fr# /etc/init.d/apache Usage: /etc/init.d/apache {start|stop|reload|reload-modules|force-reload|restart} linux:/home/fr# /etc/init.d/apache restart Restarting apache daemon... done. |
CGI (Common Gateway Interface) -Programme werden auf dem Webserver ausgeführt und liefern dynamische Daten als HTML-Datei an den Browser zurück. Im einfachsten Fall kann ein CGI-Programm ein einfaches Shell-Script sein, Sie können aber auch in jeder anderen Programmiersprache Anwendungen erstellen. Sehr beliebt sind Datenbankanwendungen, als Scriptsprache haben sich Perl und PHP durchgesetzt.
Wenn Sie ein CGI-Programm erstellt haben, so muß dieses in dem Verzeichnis /usr/lib/cgi-bin/ liegen. Im Browser ist beispielsweise das Programm test.sh als http://localhost/cgi-bin/test.sh zu erreichen. Ein einfaches Beispiel für ein Programm test.sh wäre:
#!/bin/sh # disable filename globbing set -f echo Content-type: text/plain echo echo CGI/1.0 test script report: echo echo argc is $#. argv is "$*". echo echo SERVER_SOFTWARE = $SERVER_SOFTWARE echo SERVER_NAME = $SERVER_NAME |
Vergessen Sie nicht das Script ausführbar zu machen. Wenn Sie dieses Script über die oben gezeigte URL aufrufen, erhalten Sie folgende Ausgabe in Ihrem Webbrowser:
CGI/1.0 test script report: argc is 0. argv is . SERVER_SOFTWARE = Apache/1.3.12 (Unix) Debian/GNU SERVER_NAME = surimi |
Sie können einem CGI-Programm auch Parameter übergeben, dies geschieht in der URL hinter einem Fragezeichen. Das Script zählt die Anzahl der Parameter und gibt auch den übergebenen String aus. Wenn Sie die URL http://localhost/cgi-bin/test.sh?Linuxrules! benutzen, um das Script aufzurufen, verändert sich die Ausgabe im Webbrowser in der zweiten Zeile wie folgt:
argc is 1. argv is Linuxrules!. |
Der Apache Webserver verfügt über eine Vielzahl von Funktionen, einige interessante möchten wir Ihnen im folgenden vorstellen.
Der Apache Webserver kann URLs, die nicht auf dem Server vorhanden sind, in den meisten Fällen automatisch korrigieren. Es werden sowohl fehlende Buchstaben ergänzt als auch Groß- und Kleinschreibung geprüft und ggf. korrigiert. Hierzu werden alle Dateinamen auf dem Server geprüft und mit der URL verglichen. Wenn nur eine passende Datei gefunden wird, wird die URL korrigiert und die gefundene Datei angezeigt. Bei mehreren passenden Dateien wird eine Liste angezeigt.
Um diese Funktion zu aktivieren, müssen Sie den Kommentar (#) vor der Zeile: # LoadModule speling_module /usr/lib/apache/1.3/mod_speling.so in der Datei /etc/apache/httpd.conf entfernen und die Option „CheckSpellig“ aktivieren. Hier ein Ausschnitt aus der Datei:
... LoadModule speling_module /usr/lib/apache/1.3/mod_speling.so ... ... CheckSpelling on ... |
Wenn Sie Verzeichnisse auf Ihrem Webserver mit einem Paßwort schützen wollen, so erzeugen Sie in dem gewünschten Verzeichnis die Datei .htaccess.
Diese sollte folgenden Inhalt haben:
AuthUserFile /home/user007/www/.passwd AuthName "user007" AuthType Basic <Limit GET POST> require valid-user </Limit> |
Nun benötigen Sie noch die Datei mit dem Paßwort in verschlüsselter Form. Achten Sie darauf, daß diese Datei auf keinen Fall innerhalb der aus dem Netz zugänglichen Webseiten liegt! Erzeugen Sie die Datei /home/user007/www/.passwd, mit folgendem Eintrag:
user007:gfrzGZ98bsd8 |
Sie können ein verschlüsseltes Paßwort mit dem Programm mkpasswd aus einem Klartext erzeugen.
Server Side Includes (SSI) erlauben es, Webseiten, bevor diese zum Browser geschickt werden, zu interpretieren. Sie können über speziellen Code innerhalb der Seite Variablen benutzen oder einfach Entscheidungen (if then...) treffen und viele andere Dinge.
Um diese Funktionalität zu aktivieren, muß das Modul mod_include entweder mit eincompiliert sein, oder es muß beim Start des Servers geladen werden. Weiterhin müssen Seiten, die interpretiert werden sollen, die Endung .shtml bekommen und Sie müssen dies in der Konfiguration aktivieren:
AddType text/html .shtml AddHandler server-parsed .shtml |
Weiterhin müssen Sie diese Funktion noch explizit einschalten, mit der Zeile
Options +Includes |
Die zu interpretierenden Kommandos müssen innerhalb des HTML-Codes als SGML-Kommentare eingebettet werden. Die Syntax hierzu lautet:
<!--#element attribute=value attribute=value ... --> |
Die Werte (value) werden meist in doppelten Anführungszeichen, seltener in einfachen Anführungszeichen, gefaßt. Beachten Sie, daß der Abschluß dieser Zeile ( -->) mit einem Leerzeichen beginnt!
Erlaubte Elemente sind unter anderem: „config“, „echo“, „exec“, „fsize“, „flastmod“, „printenv“, „set“ und „include“. Nähere Informationen zu diesen Elementen finden Sie in der Dokumentation, auf das Element „include“ gehen wir nun etwas genauer ein.
Mit dem Element „include“ können Sie Text aus einer anderen Datei in die aktuelle Datei einfügen. Jede dieser so eingebundenen Dateien unterliegt den Zugriffsrechten des jeweiligen Verzeichnisses, wenn Sie also für den betreffenden Bereich die Option „IncludesNoExec“ gesetzt haben, werden so eingebundene CGI-Scripte ignoriert. Wenn diese Option nicht angegeben ist, wird das CGI-Script ausgeführt und das Ergebnis eingebunden.
Das Element „include“ benötigt noch weitere Attribute, diese definieren den Ort, an dem die einzubindende Datei zu finden ist:
file - dieses Attribut gibt einen relativen Pfad zu der Datei an. Der Wert darf kein absoluter Pfad sein und darf keinen Verweis auf ein höherliegendes Verzeichnis (../) enthalten.
virtual - hiermit wird eine komplette URL relativ zum aktuellen Dokument angegeben. Hier sind keine Rechnernamen (hostname) zugelassen. Wenn die URL nicht mit einem / beginnt, wird ein Pfad relativ zum aktuellen Dokument angenommen.
Weiterhin stehen Ihnen einige Variablen zur Verfügung, die Sie entweder direkt oder in Zusammenhang mit den Kommandos echo oder if und elif verwenden können:
Die aktuelle Zeit als „Greenwich Mean Time“
Die aktuelle Zeit in der eingestellten Zeitzone
Der Dateiname, ohne Pfadangabe, des Dokumentes
Die komplette URL des Dokumentes, dies ist bei eingebundenen Dateien nicht die URL des aktuellen Dokumentes
Das Datum der letzten Änderung des Dokumentes
Hier nun ein kleines Beispiel für die Anwendung in der Praxis. Wenn Sie einen Webserver mit vielen Seiten pflegen müssen, sind Sie vielleicht schon mal in die Verlegenheit gekommen, das Layout verändern zu müssen. Nun ist es natürlich sehr aufwendig, dies in allen Dateien ändern zu müssen. Die Lösung hierfür ist nun, eine HTML-Datei zu erstellen, in der das Layout der Seite(n) bestimmt wird. Innerhalb des BODY Tags erstellen Sie nun sinngemäß folgende Einträge:
<!--#if expr="\"$DOCUMENT_URI\" = \"/foo/file.html\"" --> in foo <!--#elif expr="\"$DOCUMENT_URI\" = \"/bar/file.html\"" --> in bar --> <!--#else --> in neither <!--#endif --> |
Dies bewirkt, daß je nachdem mit welcher URL die Datei aufgerufen wird, eine andere Datei in den BODY Tag eingelesen wird. Sie müssen natürlich nicht die Hauptdatei entsprechend der Namen der anderen Dateien kopieren, ein passender Link reicht hier völlig aus. Natürlich können Sie die Liste der Dateien beliebig erweitern, dies soll nur ein kurzes Beispiel darstellen. Jede Veränderung des Aussehens der HTML-Seiten im Kopf der Datei wird nun sofort auf allen Seiten wirksam.
Manchmal ist es gewünscht, einzelne Webseiten oder gar komplette Server umzuleiten. Dies kann bei einem Providerwechsel nötig sein oder wenn Sie die Struktur Ihres Servers verändert haben.
Wenn Sie einen kompletten Server umleiten wollen, weil sich beispielsweise der Name geändert hat, so aktivieren Sie das Modul mod_alias und ergänzen Sie die Datei /etc/apache/httpd.conf um die Zeile:
Redirect / http://www.debian.org/ |
Dies führt aber nicht in allen Fällen zu dem gewünschten Ergebnis, zum Beispiel wenn nicht auf die Hauptseite, sondern auf eine alte URL unterhalb der Hauptseite zugegriffen wird. Besser ist es, wenn Sie alle Zugriffe auf den Server abfangen und dem Client (Browser) eine neue URL „unterschieben“.
Hierzu benötigen Sie das Modul mod_rewrite und folgende Zeilen in der Konfiguration:
RewriteEngine On RewriteRule /.* http://www.debian.org/ [R] |
Dies bewirkt, daß alle Anfragen auf den Server umgeleitet werden.
Sicher haben Sie in Ihrem Webbrowser schon einmal die Meldung gesehen, daß eine gesuchte Seite nicht mehr gefunden wurde ( „Error 404: Page Not Found“). Der Anbieter hat vielleicht seinen Server umstrukturiert und die URL hat sich verändert. Sowas wird sicher auch auf Ihrem Server mal passieren. Sie können mit dem Apache Webserver diese Fehlermeldungen individuell gestalten oder auch dafür sorgen, daß in dem Fall, daß eine Seite nicht gefunden wird, der Client auf eine andere Seite geleitet wird.
Standardmäßig bekommen Sie eine Fehlermeldung, wenn eine Seite nicht gefunden wurde, dazu müssen Sie nichts konfigurieren.
Je nach Fehlernummer können Sie ein anderes Verhalten erzwingen. Neben der Fehlernummer müssen Sie noch eine URL angeben, die dem Client übermittelt werden soll. Diese URLs können mit einem / beginnen, wenn es sich um lokale URLs handelt, oder auf entfernte Server verweisen.
ErrorDocument 500 http://foo.example.com/cgi-bin/tester ErrorDocument 404 /cgi-bin/bad_urls.pl ErrorDocument 401 /subscription_info.html ErrorDocument 403 "Sorry can't allow you access today" |
Zurück | Zum Anfang | Nach vorne |
TCP/IP | FTP-Server |