Ein Webserver ist eine Software, die angeforderte Dokumente über das Internet versendet. Dokumentenanforderungen stammen meistenteils von Browsern wie Lynx, Netscape usw. Neben reinen Textdokumenten kann ein Webserver jedoch auch Programme wie Zugriffszähler und Datenbankzugriffe ausführen, deren Ergebnisse in Form von Texten oder Bildern auf unserem Browser erscheinen. Ausserdem können Bilder, Musik und Videos sowie Formulare und interaktive VR-Sequenzen übertragen werden.
Eine Datei wie die folgende kann von dem Webserver an uns zurückgesandt werden:
(Datei ServerRoot/htdocs/index.html)
<html>
<head><title>Fruchtfliegenverband Drosophila</title></head>
<body bgcolor=#f80000>
<h1>Willkommen bei Drosophila</h1>
<p>
<img src="/icons/burst.gif" alt="Bild: Fliegenklatsche war aktiv">
<h3>Dies ist die Seite des Drosophila-FanClubs</h3>
</body>
</html>
In Zeile 6 wird demonstriert, wie einfach man auf im Verzeichnis
ServerRoot/icons gespeicherte Bilder zurückgreifen kann.
Beschäftigt man sich ein wenig näher mit Netzwerkverbindungen, so trifft man auf eine Fülle von Begriffen, die einem unbekannt oder verwirrend vorkommen. Eine gute Quelle für Informationen sind entsprechende Bücher oder Grundwissen Netzwerke, http://members.aol.com/duenhoel/ ab hier auch eine Reihe von Links zu ähnlichen Themen.
http://webcompare.internet.com/cgi-bin/quickcompare.pl
Welchen Webserver wählen wir nun aus ? Eines der Kriterien ist der Marktanteil des Webservers. Dieser wird von http://www.netcraft.co.uk/survey/ gemessen und bestätigt die Marktführerschaft des freien Webservers Apache. Der Apache Webserver hatte im September 1999 einen Marktanteil von ca 55%, dahinter folgte auf Platz 2 ein nicht freier Server, Netscape ca 8%, alle weiteren Server haben jeweils einen Marktanteil von weniger als 5%, so liegt es nahe, nach obigem Kriterium den Apache auszuwählen.
Den Apache bekommt man bei einigen Linux-Distributionen mitgeliefert. Falls nicht, oder die Version veraltet ist (gegenwärtig ist die Version 1.3.9 aktuell) kann man sich die Software auch via ftp von ftp://ftp.apache.de oder http://www.apache.org/dyn/closer.cgi holen.
- Copyright-Vermerk muss enthalten sein
- die Namen "Apache Server", "Apache Group" darf nicht ohne Erlaubnis
in Software enthalten sein, die sich vom Apache-Server ableitet
Alle Installationsschritte erfordern eine root-Berechtigung.
Falls der Apache von einer Linux-Distribution installiert wird,
so wird es einfach. Bei der SuSE kreuzt man bei der Installation
lediglich in der Serie n Apache an, und schon liegen die benötigten
Dateien in geeigneten Verzeichnissen auf der Festplatte. Bei anderen
Distributionen wird es vermutlich ähnlich sein.
Wenn jedoch Apache via ftp aus dem Netz geladen wurde, so sind einige
Befehle notwendig, um den Apache auf dem lokalen Rechner einzurichten.
Gehen wir einmal davon aus, dass die Datei, die wir aus dem Netz geladen
haben apache_1.3.9.tar.gz heisst, und in unserem Verzeichnis /usr/src liegt.
Dann können wir sie mit
tar xvfz apache_1.3.9.tar.gz
entpacken.Wechseln wir in das erzeugte Verzeichnis
apache_1.3.9, so können wir
mittels
./configure --prefix=/usr/local/www
die Makefiles für Apache erstellen. Dieser Schritt ist notwendig, damit
Apache zum einen mitgeteilt wird, für welche Zielplattform (Linux, BSD, ..)
compiliert werden soll und zum anderen, um wichtige Variablen
zu setzen, wie den obigen Zielpfad.
Ein anschliessendes
make
und
make install
installiert alle benötigten Dateien in den Pfad /usr/local/www.
Nach der Installation können wir unter /usr/local/www einen Verzeichnisbaum vorfinden, den wir uns nun einmal grob ansehen. Den Pfad /usr/local/www nennen wir im Folgenden ServerRoot. Dies korrespondiert mit der Namensgebung in den Konfigurationsdateien. Die Hier betrachteten Verzeichnisse existieren zum Teil nicht, wenn der Webserver unter einer Distribution erstellt wurde. Gegebenenfalls sind die Hinweise in den Installations-Log-Dateien oder den Distributions-Installations-Hilfen zu Rate zu ziehen.
Konfigurationsdateien, von denen die Wichtigste die Datei httpd.conf ist. Zu jeder Datei gehört eine weitere Datei mit der Namensendung .default. Diese Dateien sind als ein Backup der originalen Dateien zu verstehen, und sollten im Fehlerfall auf die geänderte Datei kopiert werden (wobei sich Backups ohnehin lohnen).
Die Manuals, welche mit man irgendwas gelesen werden können liegen hier. Bei der Distributions-Installation werden diese Dateien automatisch an die richtige Stelle kopiert. Sonst muss der Adminstrator entweder die Dateien selbst nach /usr/man/manX kopieren oder die Variable $MANPATH um die Verzeichnisse unter ServerRoot/man erweitern.
Hier liegt unter anderem das Programm apachectl, welche für das Starten, Stoppen und Neustarten des Servers verantworlich ist. Ausserdem noch der eigentlche Server-Dämon httpd. Zum Starten des Servers geben wir einfach ./apachectl start ein. Alternativ kann man das Starten/Stoppen auch automatisieren, indem man apachectl in das Verzeichnis /sbin/init.d legt und entsprechende Links in /sbin/init.d/rc2.d legt.
Die Datei access_log loggt alle Zugriffe auf den Webserver, error_log hingegen nur die Zugriffe, die Fehlgeschlagen sind.
Hier liegen die CGI-Programme, die sich in die Seiten einbauen lassen (z. B. Zugriffszähler)
Ruft jemand mit einem Browser ihren Server auf, so wird die Datei index.html in diesem Verzeichnis angezeigt. Ausserdem lassen sich hier noch Unterverzeichnisse erstellen, wie beispielsweise "Zucht". Eine URL wie http://www.fruchtfliegen.de/Zucht/ würde dann die Datei index.html im Verzeichnis ServerRoot/htdocs/Zucht darstellen.
Hier liegen die Bilder, die Sie bequem einbinden können.
Die wesentliche Konfigurationsdatei ist, wie oben angemerkt, ServerRoot/httpd.conf. In dieser lassen sich unter anderem folgende Einstellungen vornehmen:
Hier lässt sich die Email-Adresse der Person einstellen, die Verantwortlich für den Webserver ist. Bei Fehlermeldungen wird diese Adresse direkt mit ausgegeben.
Verzeichnis, unter dem Apaches Dateibaum liegt.
Datei, die alle Fehlernachrichten enthält.
/usr/local/www/logs/error_log
Inhalt:
[Tue Oct 5 11:31:02 1999] [error] [client 192.168.3.12] (13)Permission denied: file permissions deny server access: /home/testuser/public_html/index.html
[Tue Oct 5 11:31:07 1999] [error] [client 192.168.3.12] (13)Permission denied: file permissions deny server access: /home/testuser/public_html/index.html
[Tue Oct 5 11:31:19 1999] [error] [client 192.168.3.12] (13)Permission denied: file permissions deny server access: /home/testuser/public_html/index.html
[Tue Oct 5 18:22:00 1999] [notice] SIGHUP received. Attempting to restart
[Tue Oct 5 18:22:00 1999] [notice] Apache/1.3.6 (Unix) PHP/3.0.8 configured -- resuming normal operations
Anzahl und Tiefe der Meldungen in ErrorLog
Datei, die alle Zugriffe festhält:
CustomLog /usr/local/www/logs/access_log common
Inhalt
192.168.3.12 - - [04/Oct/1999:09:55:21 +0200] "GET /~elug/index.html HTTP/1.0" 200 2369
192.168.3.12 - - [04/Oct/1999:09:55:21 +0200] "GET /~elug/dot.png HTTP/1.0" 200 455
192.168.3.12 - - [04/Oct/1999:12:31:00 +0200] "GET /~elug/info.phtml HTTP/1.0" 200 4341
192.168.3.12 - - [04/Oct/1999:12:31:41 +0200] "GET /~elug/info.phtml HTTP/1.0" 200 4341
192.168.3.12 - - [04/Oct/1999:12:32:42 +0200] "GET /~elug/ HTTP/1.0" 200 2369
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{User-agent}i" agent
%h Host
%l Remote ID
%u User
%t Time
%r Angeforderter Request
%>s Letzter Status
%b Anzahl der gesendeten Bytes
%{User-Agent}i Z. B. "Lynx"
%U angeforderte URL
Hier lässt sich der Name des Servers eintragen (www.Fruchtfliegen.de). Hier darf kein Name stehen, der im Netz schon bekannt ist, da es sonst zu entsprechenden Konflikten kommt. Den Namen des Servers erhält man von http://www.nic.de oder seinem jeweiligen Provider mitgeteilt.
Anzahl der maximal gleichzeitig auf den Server zugreifenden Clients.
<Directory />
Options None
AllowOverride Options
Order deny,allow
Deny from all
</Directory>
<Directory "/usr/local/www/htdocs">
Options ExecCGI Includes Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/"
<Directory "/usr/local/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
AddHandler cgi-script .cgi
AddType text/html .shtml
AddHandler server-parsed .shtml
- IncludesNOEXEC verbietet die Exec-Direktive, Include darf allerdings
erfolgen
- Includes erlaubt alles
<Directory "/usr/local/www/htdocs">
Options Indexes ExecCGI Includes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
/home/dbuser/public_html/.htaccess
Options Indexes FollowSymLinks
Directory-Eintrag in httpd.conf:
<Directory "/home/*/public_html">
Options Indexes Includes ExecCGI FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
/etc/hosts
127.0.0.1 localhost
192.168.3.10 ebony.fruchtfliegen.de ebony
192.168.3.10 www.fruchtfliegen.de www
192.168.3.10 verein.fruchtfliegen.de verein
/usr/local/www./conf/httpd.conf
ServerAdmin root@ebony.fruchtfliegen.de
ServerName ebony.fruchtfliegen.de
DocumentRoot "/usr/local/www/htdocs"
NameVirtualHost 192.168.3.10
<VirtualHost 192.168.3.10>
DocumentRoot /usr/local/www/htdocs/verein
ServerName verein.fruchtfliegen.de
DirectoryIndex verein.html
</VirtualHost>
<VirtualHost 192.168.3.10>
DocumentRoot /usr/local/www/htdocs
ServerName www.fruchtfliegen.de
DirectoryIndex index.html
</VirtualHost>
Die Authentifizierung dient dazu, einem Benutzer nur dann Zugriff
auf bestimmte Seiten/Verzeichnisse zu gewähren, wenn dieser
sich mit einem Passwort identifizieren kann.
<Directory "/home/testbenutzer/public_html/admin">
Options Indexes FollowSymLinks
AllowOverride AuthConfig
</Directory>
.htaccess-File im Verzeichnis /home/testbenutzer/public_html/admin:
AuthName "gesicherter Zugang"
AuthType Basic
AuthUserFile /usr/local/www/conf/users_auth
require valid-user
Das folgende Kommando, im Verzeichnis
/usr/local/www/conf/users_auth
ausgeführt, erzeugt eine Datei mit dem
Namen users_auth. Für einen Benutzer, der hier "testbenutzer" heisst,
wird interaktiv ein Passwort vergeben.
htpasswd -c users_auth testbenutzer
Die Datei
/usr/local/www/conf/users_auth:
enthält dann (bespielsweise) folgendes:
testbenutzer:el14ddgghwer
wobei das Passwort selbstverständlich verschlüsselt ist.