Aufsetzen eines Webservers [2]

Konfiguration des Apache-Webservers

ServerRoot Dateien die für den Gebrauch des Webservers wichtig sind.

DocumentRoot Das Verzeichnis, das die HTML-Dateien enthält


Globale Einstellungen

ServerType standalone|inetd = Eigenständig oder durch inetd starten?

ServerRoot "/usr/lib/apache2" = Verzeichnis der benötigten Bibliotheken, Modulen, etc

LockFile /var/..../httpd.accept.lock = Überprüfung, ob der Apache bereits gestartet ist

PidFile /var/run/httpd.pid = Ähnlich der Lock-Datei. Festlegung der Prozess-ID

Timeout 300 = Timeout, die der Server beim Senden und Empfangen von Daten wartet.

MaxKeepAliveRequests 100 = Max. zulässige Verbindungen, ohne neuen TCP-Handshake.

KeepAliveTimeout 15 = Max. Auszeit bis zur nächsten Verbindung ohne neuen Handshake

KeepAlive On = Transfers pro Verbindung zuzulassen (On) oder zu verbieten (Off).

StartServers 1 = Anzahl der Serverprozesse, die beim Start geladen werden sollen

MinSpareServers 1 = Minimale Anzahl der unbenutzten Serverprozesse (Childs). Bei Unterschreitung werden neue Server gestartet

MaxSpareServers 1 = Maximale Anzahl unbenutzter Serverprozesse (Childs). Bei Überschreitung werden unbenutzte Serverprozesse beendet

MaxClients 150 = Maximale Anzahl gleichzeitiger TCP-Verbindungen

MaxRequestsPerChild 0 = Anzahl der abgearbeiteten Aufträgen. Bei Überschreitung wird ein Child-Prozess beendet. Damit wird verhidert, dass ein Server-Child nicht mehr als eine bestimmte Anzahl beantwortet. Außerdem bleibt ein Prozess nicht über Tage hängen.


Hauptkonfiguration

Port 80 = Portnummer, auf die der Apache lauscht

User wwwrun = UserID, unter der die Child-Prozesse des Servers laufen

Group apache = Gruppenmitgliedschaft der Child-Prozesse

Listen 80 = Portnummer, in diesem Falle sind aber mehrere Angaben möglich

ServerAdmin user@gmx.de = E-Mail-Adresse des Administrators

DocumentRoot "/var/www/localhost/htdocs" = Dokumentenverzeichnis

DirectoryIndex index.html index.php = Startdokumente

Directory, Files, VirtualHost, Limit - Einstellungen für Verzeichnisse, Dateien, etc.

Directory – Verzeichnisse konfigurieren

Die folgenden Definitionen gelten für das Wurzelverzeichnis und alle darunter liegenden Verzeichnisse.


<Directory />

AuthUserFile /etc/httpd/passwd

AllowOverride None

Options -FollowSymLinks +Multiviews // - = deaktivieren, + = aktivieren

Options Includes

</Directory>


Die Direktive <Location> begrenzt die Reichweite der enthaltenen Anweisungen auf URLs. Sie ist der Direktive <Directory> ähnlich und startet einen Abschnitt, der mit der Anweisung </Location> abgeschlossen wird.


Files – Dateien konfigurieren

Hiermit kann definiert werden, wie Dateien in Verzeichnissen behandelt werden sollen


<Files ~ "^\.ht"> // alle Dateien, die mit .ht beginnen. ~ steht für "ähnlich"

Order allow,deny // Reihenfolge, zuerst deny-, dann allow-Direktive auswerten

Deny from all // Alle Zugriffe verweigern

Satisfy All // Beide Direktiven auswerten, anstatt nur einer

</Files>


VirtualHost – Definition virtueller Hosts


ScriptAlias /cgi-bin/ "/var/www/localhost/htdocs/cgi-bin/"

Verlegen des eigentlichen Skript-Verzeichnisses (LPR-Hessen.de)


# Diese beiden IP-Adressen gehören dem Webserver

NameVirtualHost 212.67.55.3

NameVirtualHost 212.67.55.4


<VirtualHost 212.67.55.3> // Dieses Web hat die IP 212.67..55.3

ServerName www.ich-bin-gut.de

ServerAlias ich-bin-gut.de

DocumentRoot /var/www/localhost/htdocs/web_ich-bin-gut.de

ServerAdmin root@ich-bin-gut.de

</VirtualHost>


<VirtualHost 212.67.55.3> // Dieses Web hat ebenfalls die IP 212.67..55.3

ServerName www.meine-neue-homepage.de

ServerAdmin root@meine-neue-homepage.de

DocumentRoot /var/www/localhost/htdocs/web_meine-neue-homepage.de

</VirtualHost>


<VirtualHost 212.67.55.4>

ServerName www.noch-eine-homepage.de

ServerAdmin root@noch-eine-homepage.de

DocumentRoot /var/www/localhost/htdocs/web_noch-eine-homepage.de

</VirtualHost>


<VirtualHost 212.67.55.4:8080> // Dieses Web wird über den Port spezifiziert

ServerName www.andereWebseite.de

ServerAdmin root@andereWebseite.de

DocumentRoot /var/www/localhost/htdocs/web_andereWebseite.de

</VirtualHost>


<VirtualHost _default_:*> // Default-Web des Webservers

ServerName www.Default.de

DocumentRoot /var/www/localhost/htdocs/Default

</VirtualHost>


Limit – HTTP-Befehle (PUT, GET, etc) beschränken


<LIMIT GET POST>

Order allow,deny

Allow from All

</LIMIT>

Options-Paramater – Eigenschaften für Verzeichnisse definieren

Die Direktive Options legt Eigenschaften für bestimmte Vrz. Fest, die vom Apache angeboten werden:


None = Schaltet sämtliche Optionen ab

Indexes = Wenn Verzeichnis aufgerufen wird, wird die Indexdatei angezeigt.

FollowSymLinks = Symbolische Links innerhalb des Verzeichnisses werden aufgelöst

SymLinksIfOwnerMatch = SymLinks werden nur verfolgt, wenn Apache der Eigentümer ist

ExecCGI = Ermöglichen des Ausführens von CGI-Skripten

Includes = Server Side Includes (SSI) sind erlaubt

IncludesNOEXEC = Server Side Includes (SSI) sind erlaubt, aber keine ausführbaren Skripte

All = Alle genannten Optionen außer MultiViews. Wenn Options für ein Verzeichnis nicht angegeben wird, ist dies der Standardwert.


Wenn man nur Options angibt, entspricht dies Options All => Alle oben genannten Options-Paramater werden aktiviert.

Logging konfigurieren

ErrorLog /var/log/error.log = Fehlemeldungen in die Datei error.log schreiben

CustomLog | "/sbin/programm“ = Zugriffe mitloggen und einem Programm übergeben
ErrorLog syslog:tux = Fehlermeldungen werden Syslog übergeben.

LogLevel = Legt fest, ab welcher Priorität geloggt wird: emerg, crit, error, warn, notice, info, debug.

<VirtualHost 222.111.50.55>
ErrorLog /var/www/localhost/htdocs/log_pce-forum.de-error_log
CustomLog /var/www/localhost/htdocs/log_pce-forum.de-access_log common
ErrorDocument 401 /fehler.html // Bei diesem Fehlercode Leser auf fehler.html umleiten
</VirtualHost>

LogFormat des Apache einrichten

Der Apache ist in der Lage, die unterschiedlichsten Informationen auszuwerten und in eine Log-Datei zu schreiben. Zugriffszeit, IP-Adresse, aufgerufende Seite, Browser-Informationen, Herkunftsseite, und und und... Was mitgeloggt wird, kann in der httpd.conf definiert werden. Nach LogFormat wird das Logging definiert. Zum Schluss wird der Name bzw. Alias definiert. Darüber kann später das Logging eingebunden werden (siehe vorheriges Beispiel)

// Auszug httpd.conf       
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common

Substitution Bedeutung

%a IP-Adresse des Clients

%A IP-Adresse des Servers

%B Gesendete Bytes ohne HTTP-Header

%b Gesendete Bytes ohne HTTP-Header im CLF-Format, also z.B. ein - statt einer 0 wenn keine Bytes gesendet wurden

%c Verbindungsstatus nach Beendigung der Antwort:

%f Dateiname

%h Hostname des Clients

%H Das angeforderte Protokoll

%l Remote Logname (über identd falls möglich)

%m Die angeforderte Methode

%p Der canonical Port des Servers, der die Anfrage bedient

%P Die ProzessID des Child-Prozesses, der die Anfrage bedient

%q Der Query-String (angeführt von einem ? wenn ein Query-String existiert, andernfalls ein Leerstring)

%r Die erste Zeile der Anfrage

%s Status. Für Anfragen, die intern weitergeleitet wurden ist es der Status der Orginal-Anfrage. %>s gibt immer den Status der letzten Anfrage.

%t Zeit im englischen Standard-Format

%{format}t Zeit in beliebigem Format. format enthält strftime kompatible Zeitangaben

%T Zeit in Sekunden, die benötigt wurden, um die Anfrage zu bearbeiten.

%u Remote User

%U Angeforderte URL ohne eventuelle Query-Strings

%v Der Canonical Servername des Servers, der die Anfrage beantwortet

%V Der Servername entsprechend der Einstellung von UseCanonicalName.


Wichtige, vordifinierte LogFormate:

common = Common Log Format (clf)

combined = Das Combined Log Format enthält zusätzliche Informationen wie Referrer (von welcher Seite kommt der Leser) und die Browserinformationen.


Beispiel eine Logeintrags:

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"

Zugriffsrechte einschränken

<Directory />

order Deny,Allow // Reihenfolge, zuerst Deny auswerten

allow from example.org // Zugriffe von Host von example.org erlauben

deny from all // Zugriffe von allen sperren

satisfy all // deny und allow auswerten. Bei any würde nur eine ausgewertet

</Directory>


deny from all = Alle
allow from example.org = Alle von dieser Domain.
allow from 192.168.0.34 = Nur diese IP
deny from 192.158.100.0/24 = Nur aus diesem Adressbereich

Benutzerauthentifizierung via htaccess

Es wird das Modul mod_auth benötigt.


Passwortabfrage durch htaccess-Datei

<Directory /webs/sicher >

// Das Auswerten von htaccess ermöglichen

// AllowOverride None würde dieses verhindern

AllowOverride AuthConfig

</Directory>


Auszug htaccess
AuthUserFile
/var/www/localhost/htdocs/webs/sicher/.htpasswd
AuthGroupFile /dev/null
AuthName "test"
AuthType Basic

<Limit GET POST>
require user admin
</Limit>


Auszug htpasswd
admin:eeKHSxgdxBmYY


Alle Zugriffe von Außen schützen

<Files ~ "^\.ht"> // alle Dateien, die mit .ht beginnen. ~ steht für Home-Vrz. Des Apache.

Order allow,deny // Reihenfolge, zuerst deny-, dann allow-Direktive auswerten

Deny from all // Alle Zugriffe verweigern

</Files>


Erklärung:

AuthName NAME = Legt den Bereichsnamen fest, den der client bei der Passwortabfrage anzeigt.

AuthType basic-digest =Authentifizierungstyp festlegen

AuthUserFile DATEI = Datei, in der Benutzername und Passwort stehen

AuthGroupFile DATEI = Enthält Gruppen und Ihre Mitglieder

require USER = Dieser Benutzer benötigt Authentifizierung.

Konfiguration von mod_perl

  # Perl Modul laden
LoadModule perl_module /usr/lib/apache/libperl.so
AddModule mod_perl.c

# Wenn das Perl-Modul installiert ist, wird es aktiviert
<IfModule mod_perl.c>
# Hier liegen die Perl-Skripte
Alias /perl/ /var/www/perl/
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
</Location>
</IfModule>

Konfiguration von mod_php

  # Modul laden  
LoadModule php4_module /usr/lib/apache/libphp4.so
AddModule mod_php4

<IfModule mod_php4.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php4
AddType application/x-httpd-php-source .phps
</IfModule>

Apache 1 mit apachectl manipulieren

apachectl start = Apache starten

apachectl stop = Apache stoppen

apachectl restart = Apache neustarten (SIGHUP)

apachectl status = Status anzeigen

apachectl fullstatus = Ausführliche Status-Anzeige des Apache

apachectl graceful = Apache “sanft” neustarten (SIGUSR1)

apachectl configtest = Syntax der Konfigurationsdateien testen

Apache 2 mit apache2ctl manipulieren

apache2ctl -k start | stop | graceful | restart = Befehle an Apache2 schicken

apache2ctl -d VERZEICHNIS = Anderen Server-Root beim Start verwenden

apache2ctl -f DATEI = Andere Konfigurationsdatei benutzen

apache2ctl -C “Directive” = Angebene Direktive auslesen, bevor Konfigdatei eingelesen wird

apache2ctl -c “Directive” = Angebene Direktive auslesen, nachdem Konfigdatei eingelesen wird

apache2ctl -e LEVEL = Fehlermeldung auf Standard-Fehler-Ausgabe ausgeben

apache2ctl -v = Ausgabe Versionsnummer

apache2ctl -V = Ausgabe der Flags beim Kompilieren

apache2ctl -h = Hilfe

apache2ctl -l = Ausgabe der einkompilierten Module

apache2ctl -L = Mögliche Direktiven auflisten

apache2ctl -t = Syntax testen

apache2ctl -t -D DUMP_VHOSTS = Virtuelle Hosts auf Syntax prüfen

apache2ctl -S = Wie -t -D DUMP_VHOSTS