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