Apache HTTP Server: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) |
Michi (Diskussion | Beiträge) |
||
Zeile 78: | Zeile 78: | ||
... | ... | ||
Nach erfolgreichem Start des Apache HTTP Servers kann er über den Webbrowser mit http://<i>rechnername</i>/ aufgerufen werden. | Nach erfolgreichem Start des Apache HTTP Servers kann er über den Webbrowser mit "http://<i>rechnername</i>/" aufgerufen werden, je nach Konfiguration z. B. über http://localhost/. | ||
== Auswertung der Datei "access_log" == | == Auswertung der Datei "access_log" == |
Version vom 5. August 2009, 19:28 Uhr
Der Apache HTTP Server (auch: Apache) ist ein Produkt der Apache Software Foundation und der meistbenutzte Webserver im Internet.
Neben Unix und Linux unterstützt Apache auch Windows (Win32), NetWare sowie viele weitere Betriebssysteme. In Version 2.0 wurde die Stabilität und Geschwindigkeit des Servers erheblich verbessert: Die Bibliothek Apache Portable Runtime (APR) stellt eine Verallgemeinerung wichtiger Systemaufrufe zur Verfügung, sodass die Stärken des jeweiligen Betriebssystems ausgenutzt werden können. Hinzu kommen verschiedene Multiprocessing-Module (MPM), die je nach Plattform unterschiedliche Lösungen für die gleichzeitige Bedienung mehrerer Client-Anfragen anbieten.
Der Apache ist modular aufgebaut: Durch entsprechende Module kann er beispielsweise die Kommunikation zwischen Webbrowser und Webserver verschlüsseln (mod_ssl), als Proxyserver eingesetzt werden (mod_proxy) oder komplexe Manipulationen von HTTP-Kopfdaten (mod_headers) und URLs (mod_rewrite) durchführen.
Der Apache bietet die Möglichkeit, mittels serverseitiger Skriptsprachen Webseiten dynamisch zu erstellen. Häufig verwendete Skriptsprachen sind PHP, Perl oder Ruby. Diese sind kein Bestandteil des Webservers, sondern müssen ebenfalls entweder als Module eingebunden werden oder über das CGI angesprochen werden. Über das bei der Apache-Installation enthaltene mod_include kann Server Side Includes (SSI) ausgeführt werden. Damit können einfache dynamische Webseiten erstellt und der Verwaltungsaufwand von statischen Webseiten minimiert werden.
Gegenwärtig werden noch die folgdenen stabilen Versionen unterstützt und somit beispielsweise mit Sicherheitsupdates versorgt. Die Apache-Entwickler empfehlen aber, die Version 2.2.x einzusetzen, da sie diese Version für die beste erhältliche halten.
Entwicklungsreihe | Aktuelle Version (August 2009) |
---|---|
1.3.x | Apache HTTP Server 1.3.41 |
2.0.x | Apache HTTP Server 2.0.63 |
2.2.x | Apache HTTP Server 2.2.12 |
Merke: Unix is like a wigwam: no windows, no gates - only Apache inside...
Funktionsweise
Der Webserver-Daemon des Apache HTTP Server heisst httpd und arbeitet im Hintergrund. Beim Starten des Dienstes wird er als erster Prozess angestossen. Erst später kommen je nach Konfiguration (und je nach Anzahl Zugriffe auf den Webserver) weitere httpd-Instanzen als Kindprozesse dazu.
Geschichte
Datum | Version | Beschreibung |
---|---|---|
1995.04 | Apache 0.6.2 | allererste öffentlich verteilte Version |
1995.12.01 | Apache 1.0 | |
Apache 2.0 |
Installation
Konfiguration
Verwendung
Starten des Apache HTTP Servers
Je nach Linux-Distribution findet sich im Verzeichnis "/etc/init.d" üblicherweise ein Skript (im Beispiel namens "apache") zum Starten und Stoppen des Apache HTTP Server. Das Starten und Stoppen des Webservers erfolgt damit wie folgt. Weitere Optionen dieses Startskripts sind:
- "reload" liest nur die Konfigurationsdatei "httpd.conf" neu ein, ohne den Apache HTTP Server neu zu starten.
- "restart" fährt einen bereits laufenden Apache HTTP Server zu erst herunter und anschliessend wieder hoch.
$ /etc/init.d/apache start $ /etc/init.d/apache stop
Zusätzlich bringt Apache von sich aus das Skript "apachectl" mit; dieses ist z. B. im Verzeichnis "/usr/local/apache2/bin" zu finden. Zusätzlich zu "start", "stop" und "restart" besitzt dieses Skript folgende Optionen:
- "graceful" liest nur die Konfigurationsdatei "httpd.conf" neu ein, ohne den Apache HTTP Server neu zu starten.
- "configtest" testet nur die aktuelle Konfiguration.
Starten des Apache HTTP Server
# /usr/local/apache2/bin/apachectl start # ps -ef | grep httpd root 4621 1 0 12:23 ? 00:00:00 /usr/local/apache2/bin/httpd bin 4622 4621 0 12:23 ? 00:00:00 /usr/local/apache2/bin/httpd bin 4623 4621 0 12:23 ? 00:00:00 /usr/local/apache2/bin/httpd bin 4624 4621 0 12:23 ? 00:00:00 /usr/local/apache2/bin/httpd bin 4625 4621 0 12:23 ? 00:00:00 /usr/local/apache2/bin/httpd bin 4626 4621 0 12:23 ? 00:00:00 /usr/local/apache2/bin/httpd root 4630 866 0 12:24 tty2 00:00:00 grep httpd
Anzeige der aktuell laufenden Instanzen des Apache HTTP Servers.
$ ps waux | grep httpd bzw. $ ps waux | grep apache root 9800 0.0 0.4 23812 7144 ? Ss 09:12 0:01 /usr/sbin/apache2 -k start www-data 9816 0.0 0.7 28636 11764 ? S 09:12 0:00 /usr/sbin/apache2 -k start www-data 9820 0.0 0.8 29904 12916 ? S 09:12 0:00 /usr/sbin/apache2 -k start ...
Nach erfolgreichem Start des Apache HTTP Servers kann er über den Webbrowser mit "http://rechnername/" aufgerufen werden, je nach Konfiguration z. B. über http://localhost/.
Auswertung der Datei "access_log"
Um festzustellen, welche Seiten abgefragt wurden, wird die GET-Zeichenkette aus der Datei "/var/log/apache2/access_log" herausgelöst.
Eine externe Logauswertung erfolgt mit folgendem Skript: Der Aufruf von "cat" liest zunächst die Logdatei vollständig ein und übergibt sie der for-Schleife als Parameterliste - die Bash muss den gesamten Dateiinhalt also erst mal zwischenspeichern. Anschliessend wird für jeden Logeintrag "cut" als externes Programm aufgerufen.
#!/bin/bash IFS=$'\n' for l in $(cat access_log) do IFS=" " echo "${l} " | cut -d" " -f7 done
Eine interne Logauswertung erfolgt mit folgendem, wesentlich schnellerem Skript. Es öffnet die Logdatei über den Dateideskriptor 3 und liest in der while-Schleife jeweils eine zeile in die Variable "Anfrage" - die Bash braucht also stets nur einen Logeintrag zwischenzuspeichern. Anschliessend werden vom Zeilenanfang bis einschliesslich "GET " und vom Ende alle Zeichen bis einschliesslich " HTTP/" entfernt.
#!/bin/bash exec 3<access_log while read -u 3 Anfrage do Anfrage="${Anfrage##*GET }" echo "${Anfrage%% HTTP/*}" done
Weblinks
Herausgeber | Sprache | Webseitentitel | Anmerkungen |
---|---|---|---|