Apache ist der am meisten verwendete WebServer laut [http://www.netcraft.com/survey/ Netcraft].
Homepage: http://httpd.apache.org/
Lizenz: [http://www.apache.org/LICENSE.txt Apache Software License]
Derzeit sind 2 Hauptversionen von Apache im breiten Einsatz: Apache1 (1.3.xx) und Apache2 (2.0.xx).
Auch das LinuxWiki läuft mit Apache - allerdings wird die Hauptarbeit von MoinMoin gemacht (["Python"]-CGI).
Tipps & Tricks
Etwas ziemlich Geniales am Apache ist die /RewriteEngine.
- Geld sparen mit ["/mod_gzip"] (Kompression)
- Für Python-Skripte bietet sich ["/mod_python"] an.
Bücher zum Thema
Ich habe hier ein sehr gutes Buch über Apache zu empfehlen: Apache Webserver; Lars Eilebrecht, Nikolaus Rath, Thomas Rohde; Verlag: mitp; 3-8266-0829-1 -- JanRoehrich DateTime(2002-10-06T21:09:14)
Ein weiteres Buch: L.Stein and D. MacEachern. Writing Apache Modules with Perl and C. O'Reilly, 1999, 1-5659-2567-X
Es gibt ein Projekt am Hasso-Plattner-Institut Potsdam zur Modellierung des Apache - nicht so sehr interessant für Leute, die Apache nur benutzen, sondern für die, die wissen wollen, wie er "innendrin" funktioniert: http://apache.hpi.uni-potsdam.de/
Apache 2.x & SSL
Da man die meisten Erklärungen für mod_ssl in Verbindung für Apache 1.3.x erhält, soll hier eine kurze Anleitung dafür gegeben werden, wie man das für Apache 2.x macht. Apache 2 hat den Vorteil, das mod_ssl gleich mitgeliefert wird. Zur Zertifikats erstellung ist trotzdem noch eine weitere Software nötig, nämlich ["OpenSSL"]. Als erstes muss Apache entpackt und konfiguriert werden. Wichtig sind dabei folgende Optionen: "--enable-ssl" und "--with-ssl=[DIR]". Dabei muss in "[DIR]" der Pfad zu den 'Source'dateien von OpenSSL sein. Es muss auch der absolute Pfad sein, ansonsten bricht das konfigurieren ab. Danach ruft man wie gewohnt "make" und "make install" auf.
Nun muss man OpenSSL kompilieren, hierzu reicht im Grunde der ganz normale Aufruf, ohne bestimmte Parameter. Dann müssen wir zunächst ein Zertifikat erstellen. Genauere Informationen zu den Zertifikaten und den Spezifikationen gibt es auf der [http://www.modssl.org mod_ssl]-Seite. Man sollte wirklich wissen, wie SSL funktioniert, aber das hier zu erklären sprengt den Rahmen. Um uns erstmal einen Key zu erstellen, benutzen wir die mit OpenSSL gelieferte Funktion (die standardmäßig in den /bin Ordner kopiert wird). Mit diesem Aufruf:
openssl genrsa -des3 -rand file1:file2:file3 -out www.example.com.key 1024
generiert man einen Schlüssel. Wobei "genrsa" der Befehl ist zum Schlüssel erstellen. "-des3" ist optional und besagt, dass der Schlüssel durch ein Passwort geschützt wird. Dies ist ""dringend"" empfohlen, auch wenn man bei jedem Start von Apache dann das Passwort eingeben muss. "-rand" sucht sich aus den Dateien file1, file2, file3 dann Bytes zum Verschlüsseln. Hierbei kann eine biliebige Anzahl von Dateien getrennt durch ":" angegeben werden. Sie sollten doch sehr zufällig ausgewählt und relativ groß sein. "-out" legt fest, in welche Datei der key gespeichert werden kann. Lässt man das weg, wird er angezeigt. Die "1024" gibt die Länge des Schlüssels (in Bit) an. Danach müssen wir uns einen "Certificate Signing Request" erstellen, dies geschieht durch dieses Kommando:
openssl req -new -key www.example.com.key -out www.example.com.csr
Wobei der Dateiname hinter "-key" natürlich auf die eben erstellte .key Datei zeigt.
Dieses Script fragt nun nach ein paar Daten, die wahrheitsgemäß angegeben werden müssen. Bei "Common Name" muss unbedingt die Adresse stehen, die der Benutzer später aufruft, sonst wird eine Warnung an den User ausgegeben. Nun kann man diese csr-Datei an einen sog. CA senden, der dann ein Zertifikat erstellt. Über den genauen Ablauf kann man sich bei [http://digitalid.verisign.com/server/apacheNotice.htm VeriSign] oder [http://www.thawte.com Thawte] informieren. Es gibt natürlich noch weitere CAs.
Es gibt aber auch die Möglichkeit sich sein Zertifikat selbst zu erstellen. Dafür führt man diesen Befehl aus:
openssl x509 -req -days 30 -in www.example.com.csr -signkey www.example.com.key -out www.example.com.cert
Hierbei ist bei "-in" und "-signkey" die eben erstellten Dateien zu benutzen. In der Datei von "-out" wird dann das Zertifikat erstellt. Der Parameter "-days" gibt an, wann das Zertifikat abläuft (also in wievielen Tagen).
Nun muss man noch zwei Dateien kopieren. Bei der Standardinstallation muss das Zertifikat nach /usr/local/ssl/certs und der key nach /usr/local/ssl/private.
Danach folgt das, was am meisten Zeit beansprucht. Das wirkliche Konfigurieren des Indianers anhand der .conf-Dateien. Es gibt in dem /conf Ordner des Apachen eine ssl.conf, die die Standardeinstellungen bestimmt. Diese können wir erstmal so lassen, bis auf den Bereich über den Virtual Host - diesen kommentieren wir komplett mit "#" aus (also vom Beginn der <Virtualhost> Container bis zum </Virtualhost>). Nun gehen wir zu unserer eigenen Definition unserer Virtualhosts. Ich hatte sie in einer speziellen eigenen Datei namens vhosts.conf. Nun erstellen wir ganz normal einen vHost (die Einstellungsmöglichkeiten sind sehr zahlreich), fügen aber folgendes ein:
SSLEngine On SSLProtocol +all SSLCiphersuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificatefile /pfad/zum/zertifikat.cert SSLCertificatekeyfile /Pfad/zum/schluessel.key
An dem Container <virtualhost> muss zu der IP noch der Port 443 eingetragen werden. Dann den Apachen neu starten und schauen, ob er richtig startet - danach ausprobieren. Es sollte die Meldung über das Zertifikat kommen.
Dies ist jetzt nur eine Standardanleitung. Man sollte sich, wenn man es wirklich produktiv einsetzen will, auf jeden Fall ein paar Dokumentationen durchlesen (insbesondere die Sicherheit betreffend). Gute Seiten dafür sind die Seiten für [http://httpd.apache.org/ Apache] und die Seite von mod_ssl (s.o.).
Verwandte Projekte
- ["FOP"] - Formatting Objects Processor - Stylesheet Prozessor.
Fragen & Antworten
Frage: Ich möchte gerne den traffic bei apache zählen. Dafür setzt ich webalizer ein .Jedoch zeit er mir immer nur den gesamt traffic von apache an. Ich möchte aber gerne den traffic für jeden einzelnen ordner sehen d.h. jeder orndner der in meinen Apache Doc verzeichniss drin ist . Hoffe ihr habt verstanden was ich sagen will :). Casimir-lorenz@web.de
Frage: Wo finde ich ne gute Anleitung, wie zwei Apache Instanzen auf einem System laufen lassen kann. Ich brauche das weil ich durch eigene Entwicklungen auf Version 2.0.40 festgelegt bin, andererseits aber für eine Seite ["LDAP"] Authentifizierung brauche, welche ers ab Version 2.0.41 enthalten ist. -- JanRoehrich DateTime(2003-07-17T13:12:52Z)
Ist doch kein Problem, einfach beim Kompilieren unterschiedliche Verzeichnisse (--prefix normalerweise) angeben (z.B. /opt/httpd-2.0.40 vs. /opt/httpd-2.0.41) und unterschiedliche Ports/IPs nutzen -- RonnyBuchmann DateTime(2003-07-17T18:46:20Z)
Ja das ist natürlich klar. Aber ich hab mal irgendwo gelesen, dass es eine Konfiguration mit ["NamedPipe"]s gibt, bei dem beide Instanzen Port 80 nutzen können und das dann irgendwie über virtuelle Server geregelt wird. Kann aber auch nur ein schlechter Scherz gewesen sein. -- JanRoehrich DateTime(2003-07-17T19:32:38Z)
Named pipes kann ich mir nicht vorstellen, aber mit der /RewriteEngine ist es ja auch kein Problem. -- RonnyBuchmann DateTime(2003-07-18T08:17:38Z)
Hört sich nach Ente an. Grundsätzlich mal verwende man die -d oder -f Optionen, um die Serverroot bzw. eine andere Config anzugeben (Neukompolieren ist nicht notwendig, beide Instanzen können die selbe Codebase und z.B. auch Module (DSO) gemeinsam benutzen). Um beide auf Port 80 laufen zu lassen, braucht man einen IP-Alias.
Ich habe ein kleines Problem. Mein Apache ignoriert meine .htaccess. Was muß ich aktivieren, damit er sie nicht mehr ignoriert? -- ChristianNill
Schau mal in deinen <Directory> Optionen, dort könnte AllowOverride None stehen oder weiter oben ist eine andere Endung fur .htaccess Files angegeben. Wichtig ist wirklich die Option AllowOverride None - ist diese gesetzt, werden .htaccess Dateien schlichtweg ignoriert und der Zugriff nur über <Directory>-Einträge geregelt (was IMHO aber auch der bessere Weg ist, wenn man Zugriff auf die httpd.conf hat). -- Jan Kesten
Siehe auch WebServer.