Apache: Unterschied zwischen den Versionen
Rkr (Diskussion | Beiträge) |
Rkr (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 5: | Zeile 5: | ||
Die Konfig sieht dann so aus: | Die Konfig sieht dann so aus: | ||
< | <source lang="apache"> | ||
<IfDefine SSL> | <IfDefine SSL> | ||
<IfDefine !NOSSL> | <IfDefine !NOSSL> | ||
Zeile 43: | Zeile 43: | ||
</IfDefine> | </IfDefine> | ||
</IfDefine> | </IfDefine> | ||
</ | </source> | ||
Vorteil: Man kann jedem Virtual Host eigene Keys und SSL-Zertifikate zuordnen. | Vorteil: Man kann jedem Virtual Host eigene Keys und SSL-Zertifikate zuordnen. | ||
Zeile 52: | Zeile 52: | ||
Die Konfig sieht dann so aus: | Die Konfig sieht dann so aus: | ||
< | <source lang="apache"> | ||
NameVirtualHost *:443 | NameVirtualHost *:443 | ||
</ | </source> | ||
< | <source lang="apache"> | ||
<IfDefine SSL> | <IfDefine SSL> | ||
<IfDefine !NOSSL> | <IfDefine !NOSSL> | ||
Zeile 94: | Zeile 94: | ||
</IfDefine> | </IfDefine> | ||
</IfDefine> | </IfDefine> | ||
</ | </source> | ||
=== SSL-Proxy === | === SSL-Proxy === | ||
Zeile 110: | Zeile 110: | ||
=== Alle Zugriffe von Port 80 auf Port 443 (SSL) umleiten=== | === Alle Zugriffe von Port 80 auf Port 443 (SSL) umleiten=== | ||
< | <source lang="apache"> | ||
RewriteEngine on | RewriteEngine on | ||
RewriteCond %{SERVER_PORT} =80 | RewriteCond %{SERVER_PORT} =80 | ||
RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} | RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} | ||
</ | </source> | ||
bzw. | bzw. | ||
< | <source lang="apache"> | ||
RewriteEngine on | RewriteEngine on | ||
RewriteCond %{SERVER_PORT} !^430$ | RewriteCond %{SERVER_PORT} !^430$ | ||
RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} | RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} | ||
</ | </source> | ||
Diese Konfig funktioniert auch im <Directory>-Kontext, um z.B. nur eine bestimmte URL umzuleiten. Die folgende Konfig leitet nur http://www.kruedewagen.de/path auf https://www.kruedewagen.de/path um (und alle Unterverzeichnisse): | Diese Konfig funktioniert auch im <Directory>-Kontext, um z.B. nur eine bestimmte URL umzuleiten. Die folgende Konfig leitet nur http://www.kruedewagen.de/path auf https://www.kruedewagen.de/path um (und alle Unterverzeichnisse): | ||
< | <source lang="apache"> | ||
Alias /path /usr/share/path | Alias /path /usr/share/path | ||
<Directory /usr/share/path/> | <Directory /usr/share/path/> | ||
Zeile 134: | Zeile 134: | ||
RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,R] | RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,R] | ||
</Directory> | </Directory> | ||
</ | </source> | ||
=== Ein / am Ende der URL einfügen === | === Ein / am Ende der URL einfügen === | ||
< | <source lang="apache"> | ||
RewriteEngine on | RewriteEngine on | ||
RewriteRule ^/url$ http://www.mydomain.de/url/ [R] | RewriteRule ^/url$ http://www.mydomain.de/url/ [R] | ||
</ | </source> | ||
=== Logging === | === Logging === | ||
Um rewrite Logging einzuschalten (für gesamten Server oder auf Virtual Host Ebene): | Um rewrite Logging einzuschalten (für gesamten Server oder auf Virtual Host Ebene): | ||
< | <source lang="apache"> | ||
RewriteEngine on | RewriteEngine on | ||
RewriteLog "/var/log/apache2/rewrite.log" | RewriteLog "/var/log/apache2/rewrite.log" | ||
RewriteLogLevel 2 | RewriteLogLevel 2 | ||
</ | </source> | ||
== Authentifizierung == | == Authentifizierung == | ||
Wenn man eine Basic-Authentifizierung für ein Verzeichnis eingerichtet hat, gilt das normalerweise auch für alle Unterverzeichnisse. Man kann jedoch die Abfrage von Username/Passwort für Unterverzeichnisse ausschließen mittels: | Wenn man eine Basic-Authentifizierung für ein Verzeichnis eingerichtet hat, gilt das normalerweise auch für alle Unterverzeichnisse. Man kann jedoch die Abfrage von Username/Passwort für Unterverzeichnisse ausschließen mittels: | ||
< | <source lang="apache"> | ||
Allow from all | Allow from all | ||
Satisfy Any | Satisfy Any | ||
</ | </source> | ||
siehe: | siehe: | ||
Zeile 181: | Zeile 181: | ||
Möglichst gute Settings: | Möglichst gute Settings: | ||
< | <source lang="apache"> | ||
StartServers 5 | StartServers 5 | ||
MinSpareServers 5 | MinSpareServers 5 | ||
Zeile 192: | Zeile 192: | ||
MaxKeepAliveRequests 500 | MaxKeepAliveRequests 500 | ||
KeepAliveTimeout 15 | KeepAliveTimeout 15 | ||
</ | </source> | ||
=== Server Status === | === Server Status === | ||
Zeile 198: | Zeile 198: | ||
*Modul ''mod_status'' laden | *Modul ''mod_status'' laden | ||
*Konfig | *Konfig | ||
< | <source lang="apache"> | ||
<IfModule mod_status.c> | <IfModule mod_status.c> | ||
<Location /server-status> | <Location /server-status> | ||
Zeile 208: | Zeile 208: | ||
</IfModule> | </IfModule> | ||
ExtendedStatus On | ExtendedStatus On | ||
</ | </source> | ||
*Zugriff über http:/server-status | *Zugriff über http:/server-status | ||
Version vom 24. Mai 2012, 12:24 Uhr
Virtual Hosts mit SSL
Echte IP-based Virtual Hosts
Die beliebten named-based Virtual Hosts lassen sich eigentlich mit SSL nicht verwenden (Begründung siehe hier). Man muss also pro Virtual Host eine separate IP-Adresse verwenden, z.B. durch Zuweisung einer Alias-IP-Adresse und (bei NAT) Umleitung eines zusätzlichen Ports vom Router.
Die Konfig sieht dann so aus:
<IfDefine SSL>
<IfDefine !NOSSL>
<Directory "/srv/www/vhosts/server1">
Options None
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
<Directory "/srv/www/vhosts/server2">
Options None
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
<VirtualHost 1.1.1.1:443>
...
DocumentRoot "/srv/www/vhosts/server1"
...
SSLCertificateFile /etc/apache2/ssl.crt/server1.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/server1.key
...
</VirtualHost>
<VirtualHost 1.1.1.2:443>
...
DocumentRoot "/srv/www/vhosts/server2"
...
SSLCertificateFile /etc/apache2/ssl.crt/server2.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/server2.key
...
</VirtualHost>
</IfDefine>
</IfDefine>
Vorteil: Man kann jedem Virtual Host eigene Keys und SSL-Zertifikate zuordnen.
Named-based Virtual Hosts
Es ist jedoch mit named-based Virtual Hosts zumindest möglich, Server mit verschiedenen DocumentRoot Verzeichnissen aufzusetzen . Allerdings wird dabei immer nur das SSL-Zertifikat des ersten Hosts verwendet, da der Host-Header erst nach dem SSL-Handshake ausgewertet wird (so dass es am Client ggf. eine Fehlermeldung gibt).
Die Konfig sieht dann so aus:
NameVirtualHost *:443
<IfDefine SSL>
<IfDefine !NOSSL>
<Directory "/srv/www/vhosts/server1">
Options None
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
<Directory "/srv/www/vhosts/server2">
Options None
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
<VirtualHost *:443>
...
DocumentRoot "/srv/www/vhosts/server1"
...
SSLCertificateFile /etc/apache2/ssl.crt/server1.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/server1.key
...
</VirtualHost>
<VirtualHost *:443>
...
DocumentRoot "/srv/www/vhosts/server2"
...
SSLCertificateFile /etc/apache2/ssl.crt/server1.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/server1.key
...
</VirtualHost>
</IfDefine>
</IfDefine>
SSL-Proxy
Das Problem mit mehreren IP-Adressen kann man umgehen, wenn man das Modul mod_rewrite einsetzt, um einen "SSL-Proxy" zu bauen. Siehe z.B. http://www.serversupportforum.de/forum/faqs-anleitungen/2558-howto-ssl-proxy.html.
Nachteil: Unschöne URLs.
mod_rewrite
siehe
- http://www.whoopis.com/howtos/apache-rewrite.html
- http://www.webhostgear.com/109.html
- http://www.pro-linux.de/news/2006/9325.html
- http://www.modrewrite.de/foren/ftopic82.html
- Workshop: Redirect und Modrewrite
Alle Zugriffe von Port 80 auf Port 443 (SSL) umleiten
RewriteEngine on
RewriteCond %{SERVER_PORT} =80
RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI}
bzw.
RewriteEngine on
RewriteCond %{SERVER_PORT} !^430$
RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI}
Diese Konfig funktioniert auch im <Directory>-Kontext, um z.B. nur eine bestimmte URL umzuleiten. Die folgende Konfig leitet nur http://www.kruedewagen.de/path auf https://www.kruedewagen.de/path um (und alle Unterverzeichnisse):
Alias /path /usr/share/path
<Directory /usr/share/path/>
Options FollowSymLinks
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</Directory>
Ein / am Ende der URL einfügen
RewriteEngine on
RewriteRule ^/url$ http://www.mydomain.de/url/ [R]
Logging
Um rewrite Logging einzuschalten (für gesamten Server oder auf Virtual Host Ebene):
RewriteEngine on
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 2
Authentifizierung
Wenn man eine Basic-Authentifizierung für ein Verzeichnis eingerichtet hat, gilt das normalerweise auch für alle Unterverzeichnisse. Man kann jedoch die Abfrage von Username/Passwort für Unterverzeichnisse ausschließen mittels:
Allow from all
Satisfy Any
siehe:
- http://httpd.apache.org/docs/2.2/mod/core.html#satisfy
- http://www.bluestarweb.on.ca/htaccess.html
- http://webmaster.iu.edu/security_info/index.shtml
Mit der folgenden Konfiguration wird Authentifizierung nur für bestimmte IP-Ranges ausgeschaltet:
<Directory /path/>
AllowOverride None
Order allow,deny
Allow from 127
Allow from 192.168.0.0/16
Allow from 10.1.0.0/16
AuthType Basic
AuthName "Login"
AuthUserFile /path/to/htpasswd
Require user user1
Satisfy Any
Performance Tuning
Siehe http://httpd.apache.org/docs/2.2/misc/perf-tuning.html.
Möglichst gute Settings:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 255
MaxClients 255
MaxRequestsPerChild 50000
KeepAlive On
MaxKeepAliveRequests 500
KeepAliveTimeout 15
Server Status
- Siehe http://httpd.apache.org/docs/2.2/mod/mod_status.html
- Modul mod_status laden
- Konfig
<IfModule mod_status.c>
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost 127.0.0.1
</Location>
</IfModule>
ExtendedStatus On
- Zugriff über http:/server-status
Hinweis: "ExtendedStatus On" sollte nut temporär gesetzt sein.
Spezialitäten
Folgende Konfiguration ist nötig, falls Dateien von einem Samba-Share über Apache zugänglich gemacht werden sollen, ansonsten werden z.B. größere Dateien nicht vollständig transferiert (nur ca. 60 kByte):
<directory /path_to_dir>
EnableMMAP off
EnableSendfile off
</directory>
/path_to_dir ist das Verzeichnis, welches dann u.U. per symlink auf das Samba Share verweist.