Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
apache:apache [2012/11/27 17:11] – [URL-Rewriting (mod_rewrite)] st | apache:apache [2022/02/23 10:55] (aktuell) – [Direktiven] st | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Apache ====== | ||
+ | |||
+ | Der [[wpde> | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | oft benutzte Funktionen: | ||
+ | * [[virtuelle Server]] | ||
+ | * [[htaccess|.htaccess Passwortschutz]] | ||
+ | * [[netzwerke: | ||
+ | * [[SSL]] (Verschlüsselung) | ||
+ | * [[Sicheres Hosting mit suExec und fcgid]] | ||
+ | * [[http:// | ||
+ | * [[Apache Tuning]] | ||
+ | * [[programmiersprachen: | ||
+ | * [[Installation als Apache-Modul für basic Auth mit GoogleAuthenticator]] | ||
+ | * siehe auch: [[Software: | ||
+ | |||
+ | ===== Links ===== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | ===== Installation (allgemeingültig) ===== | ||
+ | **kompilieren** aus den Quellen: entpacken (tar), ./ | ||
+ | oder als **Paket** installieren: | ||
+ | * rpm-Paket: '' | ||
+ | * deb-Paket: dpkg -i PAKETDATEI.deb | ||
+ | |||
+ | Aus **Repository**(Verzeichnis von Paketen, | ||
+ | |||
+ | |||
+ | ===== Pakete für LAMP ===== | ||
+ | In [[ubuntu: | ||
+ | sudo aptitude install apache2 php5 mysql-server | ||
+ | |||
+ | Dabei werden die Abhängigkeiten korrekt aufgelöst, beispielweise das Modul für Apache (mod_php5 bzw. als Paket libapache2-mod-php5). | ||
+ | |||
+ | ===== Der Dienst (daemon) Apache | ||
+ | **Apache läuft als eigener Benutzer** unter | ||
+ | |||
+ | ^ Distribution | ||
+ | | [[Suse: | ||
+ | | [[Debian: | ||
+ | |||
+ | ==== Änderungen bei Apache 2.4.x ==== | ||
+ | |||
+ | Apache 2.4.x macht in vielen Fällen eine Anpassung der Konfiguration nötig. Das betrifft vor allen die Regelung der Zugriffsrechte auf Verzeichnisse: | ||
+ | |||
+ | Fehlermeldung " | ||
+ | < | ||
+ | < | ||
+ | Order allow,deny | ||
+ | Allow from all | ||
+ | Require all granted | ||
+ | </ | ||
+ | </ | ||
+ | ===== Konfiguration ===== | ||
+ | Syntax gemachter Änderungen testen: | ||
+ | apache2 -t | ||
+ | bzw. bei Apache 1.x | ||
+ | apache -t | ||
+ | |||
+ | ==== Dateien ==== | ||
+ | / | ||
+ | dort befindet sich allerdings bei den meisten Distribution nur eine fast leere Datei, die eigentlichen Einstellungen sind dann in '' | ||
+ | |||
+ | ==== Direktiven ==== | ||
+ | Direktiven sind Konfigurationsanweisungen die das Verhalten des Webserver beeinflussen. Sie haben entweder globale oder lokale (z.B. bei einem virtuellen Webserver oder innerhalb einer '' | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | Wichtige Direktiven sind z.B. | ||
+ | * **Servername** (gibt den FQDN auf dem der Server antwortet) | ||
+ | * **Listen** (überschreibt den Servername, normalerweise steht hier nur der Port 80 drin), Wenn man den **Apache nur lokal** aufrufbar machen will sollte man (in ports.conf bei Debian, Ubuntu) '' | ||
+ | * **ServerRoot** (Basispfad des Webservers) | ||
+ | * **DocumentRoot** (Basispfad der Webseiten) | ||
+ | |||
+ | Je nach Distribution: | ||
+ | < | ||
+ | / | ||
+ | /var/www/ (Debian, Ubuntu) | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | ==== IPv6 ==== | ||
+ | |||
+ | Apache braucht keine explizite Anpassung für IPv6 wenn " | ||
+ | ==== Sicherheitsfallstricke beim shared Hosting ==== | ||
+ | |||
+ | * kein mod_php benutzen (alles unter gleicher uid!) | ||
+ | * fpm oder fcgid ist sicher aber nur wenn FollowSymLinks deaktiviert ist | ||
+ | * das muss durch SymLinksIfOwnerMatch ersetzt werden! Siehe https:// | ||
+ | * .htaccess dürfen dann kein FollowSymLinks enthalten ((suchen: <code bash> | ||
+ | |||
+ | ===== starten / neustarten / stoppen ===== | ||
+ | * Entweder mit '' | ||
+ | |||
+ | apachectl restart | ||
+ | apache2ctl restart | ||
+ | |||
+ | * oder über Initskripte: | ||
+ | |||
+ | / | ||
+ | | ||
+ | stattdessen sind z.B. auch **start, stop oder restart** möglich. | ||
+ | |||
+ | __**Ort der Initskripte: | ||
+ | ^ Distribution ^ Befehl ^ | ||
+ | | [[Suse: | ||
+ | | [[Debian: | ||
+ | Die Klammer [2] besagt natürlich nur, dass man hier entweder apache oder apache2 eingibt, je nachdem welche Version man einsetzt. | ||
+ | |||
+ | Anmerkung: Bei aktuellen OpenSuse-Distributionen ist '' | ||
+ | |||
+ | ===== Logdateien ===== | ||
+ | |||
+ | Der Standard-Ort für Logdateien ist ''/ | ||
+ | |||
+ | |||
+ | ==== Auswertung ==== | ||
+ | * [[server: | ||
+ | * [[scanerrlog]] (Zusammenfassung der Fehler als text, html, xml, pdf) | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | ==== piped-logs ==== | ||
+ | Eine **Umleitung der Logdateien** ist auch über Programme von Drittherstellern oder eigene [[shellscripts: | ||
+ | |||
+ | Dazu muss ein Eintrag der Form | ||
+ | < | ||
+ | CustomLog "| / | ||
+ | </ | ||
+ | angelegt werden. Dies kann z. B. ein simples [[Shellscripts: | ||
+ | |||
+ | < | ||
+ | #/bin/bash | ||
+ | cat $@ >> access.log | ||
+ | </ | ||
+ | |||
+ | :!: Das angegebene Programm wird mit root-Rechten ausgeführt! Jedes Sicherheitsproblem ist hier kritisch. Auch Hintertüren lassen sich so platzieren. | ||
+ | |||
+ | :!: Bei sehr vielen virtuellen Hosts und Logdateien könnte die Anzahl der Dateihandler nicht ausreichen. Apache benutzt selbst 20-30 plus 2 pro Log. Unter [[linux: | ||
+ | |||
+ | ==== Protokollierung auf syslog ==== | ||
+ | Apache kann seine Logdateien auf über [[linux: | ||
+ | |||
+ | * **Fehlerlogs**: | ||
+ | < | ||
+ | ErrorLog syslog: | ||
+ | </ | ||
+ | local1 ist die facility (Standard: local7). | ||
+ | |||
+ | Auf dem Zielhost leitet man die facility local1 in eine eigene Datei. Beachten sollte man allerdings, dass pro Abschnitt (z. B. pro virtuellem Host) nur eine Errorlog-Direktive ausgewertet wird. D.h. wenn die Errorlog an syslog gehen, dann ist lokal nichts da. Dies lässt sich allerdings mit einem Script umgehen. | ||
+ | |||
+ | Zuerst muss müssen wir allerdings die ErrorLog-Ausgabe an ein Script schicken: | ||
+ | < | ||
+ | ErrorLog " | ||
+ | </ | ||
+ | |||
+ | Das Zielscript teilt dann die Fehlerausgabe auf: | ||
+ | <code bash> | ||
+ | #/bin/sh | ||
+ | cat $@ | tee -a / | ||
+ | </ | ||
+ | |||
+ | Erklärung: | ||
+ | - Das Programme cat nimmt die Ausgabe von Apache entgegen | ||
+ | - tee hängt die Ausgabe an die Datei ''/ | ||
+ | - und letztendlich bekommt logger die Ausgabe von Apache durchgereicht und sendet diese an syslog/ | ||
+ | |||
+ | So hat man übrigens auch allgemein **das Problem mehrerer ErrorLogs in Apache2** gelöst. | ||
+ | |||
+ | :!: [[software: | ||
+ | |||
+ | * **Transferlogs**: | ||
+ | |||
+ | Beispiel Quellcode: | ||
+ | <code bash> | ||
+ | #!/bin/sh | ||
+ | cat $@ | logger -p local7.notice -t Apache2 | ||
+ | </ | ||
+ | |||
+ | Da ein (virtueller) Host mehrere Transfer/ | ||
+ | |||
+ | === Links === | ||
+ | |||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Module ===== | ||
+ | Wichtige Module sind | ||
+ | * '' | ||
+ | * '' | ||
+ | * mod_cache, disk_cache, mem_cache (die letzten beiden brauchen mod_cache sonst kommt die Meldung '' | ||
+ | * [[http:// | ||
+ | * mod_cband (Speed, Traffice-limitting) [[http:// | ||
+ | ]] | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | [[http:// | ||
+ | |||
+ | ==== geladene Module anzeigen ==== | ||
+ | |||
+ | * auf der shell: < | ||
+ | * mit [[programmiersprachen: | ||
+ | print_r(apache_get_modules()); | ||
+ | ?></ | ||
+ | |||
+ | |||
+ | |||
+ | ==== Module (de)aktivieren ==== | ||
+ | Apache bindet auch Module von anderen Programmierern ein, dazu muss man einen symbolischen Links (Erzeugung mit '' | ||
+ | |||
+ | ^ Befehl ^ Beispielaufruf ^ Zweck des Programms ^ | ||
+ | | a2enmod / a2dismod | sudo a2enmod mod_python | (de-) aktiviert Module für Apache (Debian) | | ||
+ | | a2ensite / a2dissite | sudo a2ensite Konf1 | (de-) aktiviert Sites für Apache (Debian) | | ||
+ | |||
+ | ==== URL-Rewriting (mod_rewrite) ==== | ||
+ | |||
+ | Mit mod_rewrite kann man nur schwer lesbare URLs in angenehmere umwandeln und auch Suchmaschinen eine bessere Indizierung ermöglichen. | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | :!: Bei [[debian: | ||
+ | |||
+ | < | ||
+ | < | ||
+ | | ||
+ | </ | ||
+ | </ | ||
+ | " | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | |||
+ | === permanente Umzüge === | ||
+ | |||
+ | Wenn man eine Domain oder eine Seite auf eine neue URL umziehen lässt, sollte man korrekt den HTTP-Status 301 (moved permanently) senden. Dann werden sich auch [[suchmaschinen: | ||
+ | |||
+ | Die folgendene Konfiguration kann man global in der Apache-Konfiguration einstellen oder in einer '' | ||
+ | < | ||
+ | RewriteEngine On | ||
+ | RewriteRule ^(.*)$ http:// | ||
+ | RewriteRule .+ http:// | ||
+ | </ | ||
+ | |||
+ | Wenn rigeros alle (alten) URLs auf die neue Startseite gehen sollen: | ||
+ | < | ||
+ | RewriteEngine On | ||
+ | RewriteRule (.*) http:// | ||
+ | </ | ||
+ | |||
+ | :!: Redirect bzw. RedirectMatch werden von aktuellen Apache-Versionen angemahnt wenn flag-Optionen gesetzt sind (hier: '' | ||
+ | Redirect: invalid first argument (of three) | ||
+ | Action ' | ||
+ | The Apache error log may have more information. | ||
+ | | ||
+ | </ | ||
+ | |||
+ | |||
+ | === bestimmten Bereich auf SSL umleiten === | ||
+ | |||
+ | Ohne mod_rewrite: | ||
+ | RedirectPermanent /SUBDIR https:// | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | mit mod_rewrite:< | ||
+ | RewriteEngine On | ||
+ | RewriteCond %{HTTPS} !=on | ||
+ | RewriteRule ^/?(.*) https:// | ||
+ | </ | ||
+ | ==== redirects per PHP ==== | ||
+ | |||
+ | === 301 moved permanently (redirect) === | ||
+ | |||
+ | Folgenden Code in eine index.php schreiben: | ||
+ | |||
+ | <code php> | ||
+ | <? | ||
+ | header(' | ||
+ | header(' | ||
+ | die(); | ||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | === 302 moved temporarily(redirect): | ||
+ | |||
+ | Folgenden Code in eine index.php schreiben: | ||
+ | |||
+ | <code php> | ||
+ | <? | ||
+ | header(' | ||
+ | die(); | ||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | ==== Apache Reverse-Proxy ==== | ||
+ | |||
+ | Module Aktivieren (für http + https): | ||
+ | < | ||
+ | sudo a2enmod ssl | ||
+ | sudo a2enmod proxy | ||
+ | sudo a2enmod proxy_balancer | ||
+ | sudo a2enmod proxy_http | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | # [...] | ||
+ | ProxyPreserveHost On | ||
+ | ProxyPass / http:// | ||
+ | ProxyPassReverse / http:// | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | SSLEngine on | ||
+ | # [...] SSLCertificateFile SSLCertificateChainFile SSLProtocol | ||
+ | ProxyPreserveHost On | ||
+ | ProxyPass / http:// | ||
+ | ProxyPassReverse / http:// | ||
+ | </ | ||
+ | </ | ||
+ | ==== gzip-compression aktivieren ==== | ||
+ | |||
+ | Ein großen Effekt auf die Ladezeiten hat es wenn der Webserver die gut komprimierbaren Daten nur gepackt verschickt. Das kostet etwas CPU-Leistung, | ||
+ | |||
+ | < | ||
+ | # compress text, html, javascript, css, xml: | ||
+ | AddOutputFilterByType DEFLATE text/plain | ||
+ | AddOutputFilterByType DEFLATE text/html | ||
+ | AddOutputFilterByType DEFLATE text/xml | ||
+ | AddOutputFilterByType DEFLATE text/css | ||
+ | AddOutputFilterByType DEFLATE application/ | ||
+ | AddOutputFilterByType DEFLATE application/ | ||
+ | AddOutputFilterByType DEFLATE application/ | ||
+ | AddOutputFilterByType DEFLATE application/ | ||
+ | AddOutputFilterByType DEFLATE application/ | ||
+ | |||
+ | # Or, compress certain file types by extension: | ||
+ | <files *.html> | ||
+ | SetOutputFilter DEFLATE | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Siehe weitere Details: [[http:// | ||
+ | |||
+ | |||
+ | ==== Basic-Auth an AD (LDAP) ==== | ||
+ | |||
+ | Nur Benutzern der Gruppe " | ||
+ | |||
+ | < | ||
+ | AuthName " | ||
+ | AuthType Basic | ||
+ | AuthBasicProvider ldap | ||
+ | AuthLDAPBindDN " | ||
+ | AuthLDAPBindPassword " | ||
+ | AuthLDAPURL ldaps:// | ||
+ | AuthUserFile /dev/null | ||
+ | Require ldap-filter memberof: | ||
+ | </ | ||
+ | |||
+ | ===== Security ===== | ||
+ | |||
+ | |||
+ | Nur absolut notwendige Informationen anzeigen: | ||
+ | < | ||
+ | ServerSignature Off | ||
+ | ServerTokens Prod | ||
+ | </ | ||
+ | |||
+ | Bei installiertem PHP sollte die " | ||
+ | < | ||
+ | expose_php = Off | ||
+ | </ | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | Using suexec To Secure A Shared Server]] | ||
+ | |||
+ | |||
+ | |||
+ | ==== mod_security ==== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | ===== CGI und Perl ===== | ||
+ | [[http:// | ||
+ | [[http:// | ||
+ | [[http:// | ||
+ | |||
+ | ===== Apache(2) Tools ===== | ||
+ | - [[http:// | ||
+ | |||
+ | Im Paket apache2-utils sind einige sehr nützliche Programme enthalten: | ||
+ | |||
+ | - ab (Apache benchmark tool) | ||
+ | - logresolve (Resolve IP addresses to hostname in logfiles) | ||
+ | - htpasswd (Manipulate basic authentication files) | ||
+ | - htdigest (Manipulate digest authentication files) | ||
+ | - dbmmanage (Manipulate basic authentication files in DBM format, using perl) | ||
+ | - htdbm (Manipulate basic authentication files in DBM format, using APR) | ||
+ | - rotatelogs (Periodically stop writing to a logfile and open a new one) | ||
+ | - split-logfile (Split a single log including multiple vhosts) | ||
+ | - checkgid (Checks whether the caller can setgid to the specified group) | ||
+ | - check_forensic (Extract mod_log_forensic output from apache log files) | ||
+ | |||
+ | ==== Windows ==== | ||
+ | http:// | ||
+ | |||
+ | |||