Was ist ein Webserver ?

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 einfache HTML-Datei:

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.

Grundbegriffe

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.

Welche freien Webserver gibt es für Linux ?

http://webcompare.internet.com/cgi-bin/quickcompare.pl

Es geht um Apache

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.

Wo bekommt man Apache her?

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.

Lizenz

- 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

Installation

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.

Abgeschlossene Installation

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.

ServerRoot/conf:

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

ServerRoot/man:

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.

ServerRoot/bin:

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.

ServerRoot/log:

Die Datei access_log loggt alle Zugriffe auf den Webserver, error_log hingegen nur die Zugriffe, die Fehlgeschlagen sind.

ServerRoot/cgi-bin:

Hier liegen die CGI-Programme, die sich in die Seiten einbauen lassen (z. B. Zugriffszähler)

ServerRoot/htdocs:

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.

ServerRoot/images:

Hier liegen die Bilder, die Sie bequem einbinden können.

Grundlegende Konfiguration:

Die wesentliche Konfigurationsdatei ist, wie oben angemerkt, ServerRoot/httpd.conf. In dieser lassen sich unter anderem folgende Einstellungen vornehmen:

ServerAdmin:

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.

ServerRoot:

Verzeichnis, unter dem Apaches Dateibaum liegt.

ErrorLog:

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

LogLevel:

Anzahl und Tiefe der Meldungen in ErrorLog

CustomLog:

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:

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

ServerName:

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.

MaxClients:

Anzahl der maximal gleichzeitig auf den Server zugreifenden Clients.

Was tue ich um... ?

1. CGIs zu erlauben/verbieten/für bestimmte Verzeichnisse zu gestatten ?


<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

2. SSI

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>

3. Was hat es mit .htaccess auf sich ?

/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>

4. Virtuelle Server ?

/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>

5. Authentifizierung ?

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.