Apache: Unterschied zwischen den Versionen

aus www.kruedewagen.de, Homepage von Ralf und Judith Krüdewagen (Kruedewagen)
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 5: Zeile 5:


Die Konfig sieht dann so aus:
Die Konfig sieht dann so aus:
<pre>
<source lang="apache">
<IfDefine SSL>
<IfDefine SSL>
<IfDefine !NOSSL>
<IfDefine !NOSSL>
Zeile 43: Zeile 43:
</IfDefine>
</IfDefine>
</IfDefine>
</IfDefine>
</pre>
</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:


<pre>
<source lang="apache">
NameVirtualHost *:443
NameVirtualHost *:443
</pre>
</source>


<pre>
<source lang="apache">
<IfDefine SSL>
<IfDefine SSL>
<IfDefine !NOSSL>
<IfDefine !NOSSL>
Zeile 94: Zeile 94:
</IfDefine>
</IfDefine>
</IfDefine>
</IfDefine>
</pre>
</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===
<pre>
<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}
</pre>
</source>


bzw.
bzw.


<pre>
<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}
</pre>
</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):


<pre>
<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>
</pre>
</source>


=== Ein / am Ende der URL einfügen ===
=== Ein / am Ende der URL einfügen ===
<pre>
<source lang="apache">
RewriteEngine on
RewriteEngine on
RewriteRule ^/url$ http://www.mydomain.de/url/ [R]
RewriteRule ^/url$ http://www.mydomain.de/url/ [R]
</pre>
</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):
<pre>
<source lang="apache">
   RewriteEngine on
   RewriteEngine on
   RewriteLog "/var/log/apache2/rewrite.log"
   RewriteLog "/var/log/apache2/rewrite.log"
   RewriteLogLevel 2
   RewriteLogLevel 2
</pre>
</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:
<pre>
<source lang="apache">
Allow from all
Allow from all
Satisfy Any
Satisfy Any
</pre>
</source>


siehe:
siehe:
Zeile 181: Zeile 181:


Möglichst gute Settings:
Möglichst gute Settings:
<pre>
<source lang="apache">
StartServers        5
StartServers        5
MinSpareServers      5
MinSpareServers      5
Zeile 192: Zeile 192:
MaxKeepAliveRequests 500
MaxKeepAliveRequests 500
KeepAliveTimeout 15
KeepAliveTimeout 15
</pre>
</source>


=== Server Status ===
=== Server Status ===
Zeile 198: Zeile 198:
*Modul ''mod_status'' laden
*Modul ''mod_status'' laden
*Konfig
*Konfig
<pre>
<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
</pre>
</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

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:

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

<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

Hinweis: "ExtendedStatus On" sollte nut temporär gesetzt sein.

Spezialitäten

Samba Share

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.

Dokumentation

Siehe auch