Apache / Wartungsseite einrichten

Apache, Lighttpd, nginx, Cherokee
jack99
Posts: 25
Joined: 2007-06-15 13:54

Apache / Wartungsseite einrichten

Post by jack99 » 2007-07-13 22:02

Hallo ich suche nach einer Möglichkeit eine "Wartungsarbeieten-Seite" für den Apache2-Webserver einzurichten.

Dabei möchte ich daß während der Wartungsarbeiten global alle vHosts quasi deaktiviert und durch eine entsprechende HTML-Seite mit einem Hinweis auf Wartungsarbeiten ersetzt werden. Von bestimmten IP-Adressen soll der Zugriff auf die vHosts jedoch weiterhin möglich sein um die Websiten während der Wartungsarbeiten testen zu können.

Deshalb dachte ich an eine Art serverweite IP-basierte-Umleitung. Dann würde ich zentral für alle vHosts/Server eine Umleitung zur Wartungsseite einrichten und nur Anfragen von einer bestimmten IP würden die "normalen" Inhalte der vhosts liefern.

Nun eine derartige Umleitung ließe sich z.B. mittels mod_rewrite wie folgt realisieren:

<Directory />
RewriteEngine On
# die IP 88.76.202.104 soll z.B. nicht umgeleitet werden
RewriteCond %{REMOTE_ADDR} !^88.76.202.104
RewriteRule !wartungsarbeiten.html /wartungsarbeiten.html [L]
</Directory>

Das Problem ist nun, dass ich jetzt immer auf ein Verzeichnis bzw. eine Datei unterhalb des DocumentRoot des jeweiligen vHosts weitergeleitet werde. D.h. :

domain1.de wird umgeleitet nach domain1.de/wartungsarbeiten.html
domain2.de wird umgeleitet nach domain2.de/wartungsarbeiten.html

usw.

deshalb müsste ich im Prinzip für jeden vHost entweder ein eigenes Verzeichnis oder zumindest eine eigne Datei wartungsarbeiten.html anlegen. Bis jetzt ist es mir leider nicht gelungen eine Umleitung auf irgendein internes gemeinsames Verzeichnis oder Datei einzurichten die für alle vHost gelten würde..

Vielleicht kennt ja jemand eine Möglichkeit oder eine bessere Lösung für mein Problem?

Vielen Dank im Voraus
jack

dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: Apache / Wartungsseite einrichten

Post by dtdesign » 2007-07-13 22:10

jack99 wrote:Dabei möchte ich daß während der Wartungsarbeiten global alle vHosts quasi deaktiviert
Alle Einträge aus sites-enabled löschen bzw. Ordner umbenennen. Dann nur einen Vhost auf * anlegen.
jack99 wrote:und durch eine entsprechende HTML-Seite mit einem Hinweis auf Wartungsarbeiten ersetzt werden. Von bestimmten IP-Adressen soll der Zugriff auf die vHosts jedoch weiterhin möglich sein um die Websiten während der Wartungsarbeiten testen zu können.
Schließt meinen Vorschlag oben aus.
jack99 wrote:<Directory />
RewriteEngine On
# die IP 88.76.202.104 soll z.B. nicht umgeleitet werden
RewriteCond %{REMOTE_ADDR} !^88.76.202.104
RewriteRule !wartungsarbeiten.html /wartungsarbeiten.html [L]
</Directory>
Ist ja auch klar warum. / ist zwar absolut, jedoch nur für die Domain!

Mein Vorschlag (reine Idee / nicht gestetest):

Der Ordner der alle aktiven VHosts drin hat wird umbenannt. An seine Stelle kommt ein Ordner der nur eine einzige Datei (oder symlink) enthält. Diese Datei includiert alle aktiven VHosts die im umbenannten Ordner liegen.

Zugleich kannst du dir eine zweite solche Datei anlegen, die bei Wartungsarbeiten aktiv ist. Inhalt:

Wenn IP = 1.2.3.4 -> includiere alle VHosts
Wenn IP != 1.2.3.4 -> zeig mir ne hässliche "Wartungsarbeiten"-Seite ;)

Sollte möglich sein mit nativem Apache ohne mod_rewrite.

Gruß
dtdesign

jack99
Posts: 25
Joined: 2007-06-15 13:54

Re: Apache / Wartungsseite einrichten

Post by jack99 » 2007-07-13 22:27

Vielen Dank erst mal für die schnelle Antwort.

Nun diese Lösung ist eigentlich das was ich brauche:

Wenn IP = 1.2.3.4 -> includiere alle VHosts
Wenn IP != 1.2.3.4 -> zeig mir ne hässliche "Wartungsarbeiten"-Seite

aber dazu bräuchte ich doch eine Möglichkeit die vHosts zur Laufzeit in Abhängigkeit von der IP zu includen, also

wenn IP=1.2.3.4 dann include /etc/apache2/sites-enabled/
wenn IP!=1.2.3.4 dann include /etc/apache2/sites-enabled/vHost_wartung

man muss jedoch den Apache immer reloaden damit er die neuen Einstellungen übernimmt, somit ist die o.g. Abfrage zur Laufzeit nicht möglich, oder habe ich das falsch verstanden?

viele Grüße
jack

dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: Apache / Wartungsseite einrichten

Post by dtdesign » 2007-07-13 23:03

jack99 wrote:man muss jedoch den Apache immer reloaden damit er die neuen Einstellungen übernimmt, somit ist die o.g. Abfrage zur Laufzeit nicht möglich, oder habe ich das falsch verstanden?
Ist auch irgendwie logisch. Der Indianer wertet VHosts anhand der Konfigurationsdatei im Speicher aus, die immer neu von der Platte laden zu müssen wäre der absolute Performance-Killer, viel zu viel Overhead :)

Gruß
dtdesign

jack99
Posts: 25
Joined: 2007-06-15 13:54

Re: Apache / Wartungsseite einrichten

Post by jack99 » 2007-07-13 23:22

ideal wäre eine Lösung z.B. mittels einer übergordneten .htaccess Datei z.B. direkt im DocumentRoot des Webservers in "/var/www". .htaccess wird ja zur Laufzeit geparst. Vielleicht gibt es da eine Möglichkeit mit mod_rewrite eine entsprechende Umleitung anhand der IP einzurichten. Eigentlich funktioniert die Umleitung ja bereits, nur daß ich halt immer auf zu der wartungsseite.html in dem jeweiligen vHost umgeleitet werde.

Mich würde jedoch auch interessieren ob es denn evtl. noch andere, bessere Lösungsansätze gibt. Denn die von mir beschriebene Möglichkeit setzt auch voraus, daß die "globale" mod_rewrite Direktiven nicht von den .htaccess direktiven in den jeweiligen vHosts überschrieben werden.

viele Grüße
jack

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Apache / Wartungsseite einrichten

Post by Joe User » 2007-07-13 23:27

Quick&Dirty&Untested:

Code: Select all

ErrorDocument 403 /path/to/wartungsarbeiten.html
Order allow,deny
Deny from all
Allow from <IP>

jack99
Posts: 25
Joined: 2007-06-15 13:54

Re: Apache / Wartungsseite einrichten

Post by jack99 » 2007-07-14 00:04

vielen Dank für den Vorschlag.

Die Idee gefällt mir schon mal sehr gut. Allerdings gibt es da noch zwei Probleme:

1) Die Fehler- bzw. Wartungsseite muss leider nach wie vor im DocumentRoot des jeweiligen vHosts liegen

2) Gibt es in dem DocumentRoot des jeweiligen vHosts bereits eine Datei .htaccess mit den Direktiven "Order allow,deny", so werden die Anweisungen der übergeordneten "Wartungs"-.htaccess dadurch leider außer kraft gesetzt. Es sei denn AllowOverride wir wie folgt gesetzt:

<Directory "/var/www/">
# In diesem Verzeichnis wird die .htaccess platziert
Options FollowSymLinks
AllowOverride all
</Directory>
<Directory "/var/www/vhosts/">
# für alle vhosts werden .htaccess-direktiven deaktivieret
Options FollowSymLinks
AllowOverride none
</Directory>

Das wiederum setzt jedoch voarus, daß in den vhosts selbst keine AllowOverride all direktiven mehr vorhanden sind, die die o.g. Einstellungen überschreieben würden. Alles in allem scheint mir diese Lösung deshalb etwas zu unübersichtlich und zu umständlich.

viele Grüße
jack

dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: Apache / Wartungsseite einrichten

Post by dtdesign » 2007-07-14 01:19

jack99 wrote:1) Die Fehler- bzw. Wartungsseite muss leider nach wie vor im DocumentRoot des jeweiligen vHosts liegen
Nö. Die Error403-Seite kann auch in /etc liegen, das spielt erstmal keine Rolle (abgesehen von Rechten etc...)
jack99 wrote:Das wiederum setzt jedoch voarus, daß in den vhosts selbst keine AllowOverride all direktiven mehr vorhanden sind, die die o.g. Einstellungen überschreieben würden. Alles in allem scheint mir diese Lösung deshalb etwas zu unübersichtlich und zu umständlich.
Nö. Wenn du in der VHost Konfiguration die Direktive "AllowOverride None" drin hast, macht die .htaccess das, was sie eigentlich tun sollte: nichts (Stichwort Performance!)

Die Lösung ist vielleicht nicht die Beste, aber deine Frickeleien (nicht als persönlichen Angriff auffassen!) machen es erst unübersichtlich.

Nimm dir lieber ein LightTPD als Webserver, der kommt mit 90% weniger Konfigurationsaufwand zurecht = übersichtlicher :)

jack99
Posts: 25
Joined: 2007-06-15 13:54

Re: Apache / Wartungsseite einrichten

Post by jack99 » 2007-07-14 09:30

Nö. Die Error403-Seite kann auch in /etc liegen, das spielt erstmal keine Rolle (abgesehen von Rechten etc...)
Wenn ich in der .htacceess z.B. ErrorDocument 403 /var/www/wartungsarbeiten.html eintrage, dann steht in der error.log

client denied by server configuration: /var/www/vhosts/domain.de/var
Nö. Wenn du in der VHost Konfiguration die Direktive "AllowOverride None" drin hast, macht die .htaccess das, was sie eigentlich tun sollte: nichts
Das habe ich doch nicht anders gemeint? Die vHosts haben allerdings Ihre eigene .htaccess Dateien, somit müßte ich bei allen vHosts AllowOverride None einfügen - das wäre richtig umständlich und würde auch dazu führen, daß dei Websiten zumindest teilweise nicht mehr funktionieren.
Die Lösung ist vielleicht nicht die Beste, aber deine Frickeleien (nicht als persönlichen Angriff auffassen!) machen es erst unübersichtlich.
Die Lösung von Joe funktioniert halt nicht bzw. es setzt zu viele Sachen voraus. Mit einem einfachen erstellen der .htaccess ist es leider nicht getan und das macht ja die ganzen Frickeleien ja erst erforderlich. Ich würde ja gerne darauf verzichten, ich weiß nur nicht wie. Die Problematik hast Du ja gut auf den Punkt gebracht
Wenn IP = 1.2.3.4 -> includiere alle VHosts
Wenn IP != 1.2.3.4 -> zeig mir ne hässliche "Wartungsarbeiten"-Seite
nur die Lösung fehlt noch.

viele Grüße
jack

dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: Apache / Wartungsseite einrichten

Post by dtdesign » 2007-07-14 09:40

Egal wie du es drehst oder wendest, so eine Krücke in einen Apache einzubauen ist einfach nur eklig. Mein Vorschlag listet nur die grobe Struktur auf, das ganze weitere wird - wie du bereits festgestellt hast - eine einzige Frickelei.

Gruß
dtdesign

jack99
Posts: 25
Joined: 2007-06-15 13:54

Re: Apache / Wartungsseite einrichten

Post by jack99 » 2007-07-14 09:52

Krücke, eklig?
Sorry verstehe ich nicht. Es gibt ein Problem und es wird halt nach einer guten Lösung gesucht. Das ist in der EDV eigentlich der alltag - wenn Du so willst ist die ganze EDV somit eine einzige Frickelei.

viele Grüße
jack

dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: Apache / Wartungsseite einrichten

Post by dtdesign » 2007-07-14 10:06

Ok, ungünstig formuliert. Ich wollte damit nur andeuten, dass dein Vorhaben am Ende eine reine Frickelei wird und das mein Vorschlag nichts anderes ist als das, was Joe User schrieb. Nur versuchst du nach einer immer besseren Lösung zu suchen (soweit auch lobenswert), jedoch stößt man bei diesem konkreten Problem schnell an die Unzulänglichkeit von Apache.

Ich muss mal schauen, irgendwo müsste ich noch einen Apache installiert haben, vielleicht findet sich ja eine Lösung.

Gruß
dtdesign

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Apache / Wartungsseite einrichten

Post by Joe User » 2007-07-14 10:36

Definiere das ErrorDocument und die Denys global in der httpd.conf und gut ist...

jack99
Posts: 25
Joined: 2007-06-15 13:54

Re: Apache / Wartungsseite einrichten

Post by jack99 » 2007-07-14 10:50

wie gesagt die folgede Lösung geht schon in die richtige richtung und sie ist auch nicht besonders aufwendig:
<Directory />
RewriteEngine On
# die IP 88.76.202.104 soll z.B. nicht umgeleitet werden
RewriteCond %{REMOTE_ADDR} !^88.76.202.104
RewriteRule !wartungsarbeiten.html /var/www/vhosts/wartung/wartungsarbeiten.[L]
</Directory>
Mann könnte diesen Code dann nur nach bedarf includen und das Problem wäre eigentlich mit einem Handgrif erledigt. Das wäre sicherlich akzeptabel.

Das "Problem" ist nur, daß die Umleitung immer zum DocumentRoot des jeweiligen vHost führt und nicht zu dem angebenem absoluten pfad und das für alle vHosts AllowOverride none gesetzt werden muss (weiß allerdings auch nicht warum, ansonsten funkt. es nicht)?

viele Grüße
jack

dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: Apache / Wartungsseite einrichten

Post by dtdesign » 2007-07-14 12:30

matzewe01 wrote:Das laden von der Platte wohl weniger. die Verarbeitung der Daten auch nicht unbdedingt.
Zugriffe auf die Platte ist immer langsamer als RAM, daher wäre der Overhead durchaus vorhanden und in Relation zu der Einstellung die Konfigurationsdateien im Speicher zu lassen, macht es durchaus eine Menge aus. Heutzutage sowieso vernachlässigbar, aber es hilft beim Verständnis, weshalb soetwas nicht on-the-fly geht. Ansonsten stimme ich dir voll und ganz zu.

@jack99:
Warum rewrite? Ich halte den Vorschlag von Joe User immernoch für den besten, da es meiner Meinung nach die sauberste Lösung ist. Probiere es mal mit der!

Gruß
dtdesign

jack99
Posts: 25
Joined: 2007-06-15 13:54

Re: Apache / Wartungsseite einrichten

Post by jack99 » 2007-07-14 13:29

@joe
Definiere das ErrorDocument und die Denys global in der httpd.conf und gut ist...
ok , dann richte ich es wie folgt ein:

Code: Select all

NameVirtualHost xxx.xxx.xxx.xxx:80 
DocumentRoot "/var/www" 
UseCanonicalName Off 

ErrorDocument 403 /var/www/vhosts/www-user/wartung/wartungsarbeiten.html 

<Directory /> 
   <Files ~ "^.ht"> 
      deny from all 
   </Files> 
   Options FollowSymLinks 
   AllowOverride none
   Order allow,deny 
  Deny from all 
  Allow from 88.76.202.104
</Directory> 

<VirtualHost xxx.xxx.xxx.xxx:80> 
 ServerName testdomain.de 
 ServerAlias  *.testdomain.de 
 DocumentRoot /var/www/vhosts/www-user/html/testdomain.de 
 SuexecUserGroup www-user www-data 
 <Directory "/var/www/vhosts/www-user/html/testdomain.de"> 
  Options +FollowSymLinks 
 </Directory> 
</VirtualHost>
Nun die testdomain wird zwar nicht mehr angezeigt, aber die Wartungsseite ebenfalls nicht. In der error.log steht nämlich:

client denied by server configuration: /var/www/vhosts/www-user/html/testdomain.de/
client denied by server configuration: /var/www/vhosts/www-user/html/testdomain.de/var

Obwohl, die Anweisung

ErrorDocument 403 /var/www/vhosts/www-user/wartung/wartungsarbeiten.html

im globalen Serverkontext steht versucht der vhost offenbar innerhalb von seinem DocumentRoot die Datei zu finden (die Deny´s lassen sich übrigens nicht im globalen Server-Kontext definieren).

Zweiter Nachteil: sobald in dem vHost die Direktive AllowOverride all steht und eine .htaccess datei den Zugriff steuert funktioniert die Lösung nicht mehr. Es ist nun mal so daß die meisten vHosts zusätzlich durch ihre .htacces-dateien gesteuert werden. somit kann ich die nicht alle auf AllowOverride none setzten.


@matzewe01
Alle Kunden erhalten zumindest bei uns, exakt die gleiche Wartungsseite.
Kann man natürlich auch individuell konfigurieren.
Das ist an sich ja kein Problem, das könne man z.B. auch wie folgt lösen:

Code: Select all

#Server im normalen Betrieb
include /etc/apache2/sites-enabled/
#include /etc/apache2/sites-enabled/WARTUNGSSEITE

Code: Select all

#Server im Wartungsbetrieb
#include /etc/apache2/sites-enabled/
include /etc/apache2/sites-enabled/WARTUNGSSEIT
So kann ich jedoch die vhosts nicht im Wartungsbetrieb testen.
Hast Du bei Dir eine Lösung am laufen die es Dir ermöglicht die einzelnen vHosts im Wartungsbetrieb zu testen, d.h. Deine Kunde sehen die Wartungsseite, Du kannst aber die Websiten der Kunden ganz normal aufrufen?

viele Grüße
jack

dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: Apache / Wartungsseite einrichten

Post by dtdesign » 2007-07-14 13:59

matzewe01 wrote:Das mit der 2. IP Adresse ist jedoch die beste Lösung, da Du die Anwendung unter realistischen Bedidngen testen kannst. Hasrt links z.B. auf http://www.myhost.de/.... bleiben bei der Portverlagerung nicht testbar.
Was ist daran nicht realistisch. Gaukel deinem PC (Linux: /etc/hosts || Windows: C:Windowssystem32driversetchosts) einfach eine andere Namensauflösung vor. Dann zeigt http://www.example.com nicht mehr auf 192.168.0.1 sondern auf 192.168.0.2! Ergo ist es realistisch. Bei einer Portverlagerung tippst du zur Not halt den Port noch ein, das sollte nich die Welt sein und Hardlinks sind meist eh böse ;)

Gruß
dtdesign

jack99
Posts: 25
Joined: 2007-06-15 13:54

Re: Apache / Wartungsseite einrichten

Post by jack99 » 2007-07-14 14:08

hallo deine lösung klingt nicht uninteressant.

eine zweite ip steht mir allerdings nicht zur verfügung.
Keine 2. IP, dann versuche es mit einem VPN Tunnel und binde dich an eine lokale Adresse z.B. 127.0.0.2 (die Du für das VPN angegeben hast) Natürlich Deinen lokalen Rechner mit der dem hosts Eintrag austricksen
mit vpn hatte ich bis jetzt noch nie was zu tun, wäre es möglich, daß du die lösung etwas genauer beschreibst, vielleicht kennst Du evtl. einen guten Lik zu einem entsprechenden Howto oder ähnliches - ich kriege hier langsam die kriese :-)
hast du vielleicht eine ahnung wieso es mit mod_rewrite im globalen server-kontext nicht funktioniert?

viele grüße
jack

jack99
Posts: 25
Joined: 2007-06-15 13:54

Re: Apache / Wartungsseite einrichten

Post by jack99 » 2007-07-14 14:25

hallo,

ich bin ehrlich gesagt sehr überrascht, daß die ganze Geschichte offenbar so problematisch ist. Natürlich ist es nicht weiter schwer eine andere vHost-datei zu includen, ich halte es jedoch für wichtig, daß ich während der Wartungsarbeiten, Updates etc. Zugriff auf die Projekte habe bevor diese dann online gehen. Eine einfache Umleitung anhand der IP-Adresse wäre eigentlich die perfekte Lösung - keine zwei IP-Adressen, keine doppelten vhosts-dateien etc. Ich komme jedoch nicht dahinter wieso es nicht funktioniert - aber es muss doch irgendwie gehen, wozu sollte denn RewriteRule im server-kontext dann überhaupt gut sein?

viele grüße
jack

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Apache / Wartungsseite einrichten

Post by Joe User » 2007-07-14 14:48

Am Besten Du fängst mit einer sauberen httpd.conf an, dann lösen sich viele Probleme wie von selbst. Nachfolgend mal der Weg zu einer sauberen httpd.conf, bitte nur Pfade und Modulnamen selbst anpassen:

Code: Select all

mkdir -p /srv/www/htdocs-secure
mkdir -p /etc/apache2/ssl

cd /etc/apache2/ssl
/etc/ssl/misc/CA.pl -newca
/etc/ssl/misc/CA.pl -newreq
/etc/ssl/misc/CA.pl -sign
openssl req -new > apache.csr
openssl rsa -in privkey.pem -out apache.key
openssl x509 -in apache.csr -out apache.crt -req -signkey apache.key -days 365
chmod 400 apache.{key,crt,csr} privkey.pem
cd ~/

mv /etc/apache2/httpd.conf /etc/apache2/httpd_original.conf

cat > /etc/apache2/httpd.conf << "EOF"
ServerRoot "/usr/lib/apache2"
PidFile "/var/run/apache2.pid"
LockFile "/var/run/apache2.lock"
Timeout 300
KeepAlive On
KeepAliveTimeout 15
MaxKeepAliveRequests 100
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild 500
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild 500
</IfModule>
Listen 80
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#LoadModule cache_module modules/mod_cache.so
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_lock_module modules/mod_dav_lock.so
#LoadModule dbd_module modules/mod_dbd.so
#LoadModule disk_cache_module modules/mod_disk_cache.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule ident_module modules/mod_ident.so
#LoadModule imagemap_module modules/mod_imagemap.so
#LoadModule info_module modules/mod_info.so
#LoadModule logio_module modules/mod_logio.so
#LoadModule mem_cache_module modules/mod_mem_cache.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule status_module modules/mod_status.so
#LoadModule unique_id_module modules/mod_unique_id.so
#LoadModule userdir_module modules/mod_userdir.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule ssl_module modules/mod_ssl.so
#LoadModule suexec_module modules/mod_suexec.so
User wwwrun
Group wwwrun
ServerTokens OS
ServerSignature On
UseCanonicalName On
<Directory "/">
    Options -All +FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
ServerName www.domain.tld:80
ServerAdmin webmaster@domain.tld
DocumentRoot "/srv/www/htdocs"
<Directory "/srv/www/htdocs">
    Options -All +FollowSymLinks
    AllowOverride Options FileInfo AuthConfig Limit
    Order allow,deny
    Allow from all
</Directory>
DirectoryIndex index.html index.html.var index.php
AccessFileName .htaccess
<FilesMatch "^.ht">
    Order allow,deny
    Deny from all
</FilesMatch>
TypesConfig "/etc/mime.types"
DefaultType text/plain
<IfModule mime_magic_module>
    MIMEMagicFile "/etc/apache2/magic"
</IfModule>
HostnameLookups Off
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
<IfModule logio_module>
    LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
</IfModule>
CustomLog "/var/log/apache2/access_log" combined
ErrorLog "/var/log/apache2/error_log"
LogLevel warn
ReadmeName README.html
HeaderName HEADER.html
IndexOptions FancyIndexing VersionSort FoldersFirst IgnoreCase IgnoreClient NameWidth=* SuppressDescription XHTML
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t .svn
IndexOrderDefault Ascending Name
<IfModule cgid_module>
    Scriptsock "/var/run/cgisock"
</IfModule>
ScriptAlias "/cgi-bin/" "/srv/www/cgi-bin/"
<Directory "/srv/www/cgi-bin">
    Options -All +ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
Alias "/icons/" "/srv/www/icons/"
<Directory "/srv/www/icons">
    Options -All +MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
DefaultLanguage en
AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
ForceLanguagePriority Prefer Fallback
AddCharset us-ascii        .ascii      .us-ascii
AddCharset ISO-8859-1      .iso8859-1  .latin1
AddCharset ISO-8859-2      .iso8859-2  .latin2 .cen
AddCharset ISO-8859-3      .iso8859-3  .latin3
AddCharset ISO-8859-4      .iso8859-4  .latin4
AddCharset ISO-8859-5      .iso8859-5  .cyr    .iso-ru
AddCharset ISO-8859-6      .iso8859-6  .arb    .arabic
AddCharset ISO-8859-7      .iso8859-7  .grk    .greek
AddCharset ISO-8859-8      .iso8859-8  .heb    .hebrew
AddCharset ISO-8859-9      .iso8859-9  .latin5 .trk
AddCharset ISO-8859-10     .iso8859-10 .latin6
AddCharset ISO-8859-13     .iso8859-13
AddCharset ISO-8859-14     .iso8859-14 .latin8
AddCharset ISO-8859-15     .iso8859-15 .latin9
AddCharset ISO-8859-16     .iso8859-16 .latin10
AddCharset ISO-2022-JP     .iso2022-jp .jis
AddCharset ISO-2022-KR     .iso2022-kr .kis
AddCharset ISO-2022-CN     .iso2022-cn .cis
AddCharset Big5.Big5       .big5       .b5
AddCharset cn-Big5         .cn-big5
AddCharset WINDOWS-1251    .cp-1251    .win-1251
AddCharset CP866           .cp866
AddCharset KOI8            .koi8
AddCharset KOI8-E          .koi8-e
AddCharset KOI8-r          .koi8-r     .koi8-ru
AddCharset KOI8-U          .koi8-u
AddCharset KOI8-ru         .koi8-uk    .ua
AddCharset ISO-10646-UCS-2 .ucs2
AddCharset ISO-10646-UCS-4 .ucs4
AddCharset UTF-7           .utf7
AddCharset UTF-8           .utf8
AddCharset UTF-16          .utf16
AddCharset UTF-16BE        .utf16be
AddCharset UTF-16LE        .utf16le
AddCharset UTF-32          .utf32
AddCharset UTF-32BE        .utf32be
AddCharset UTF-32LE        .utf32le
AddCharset euc-cn          .euc-cn
AddCharset euc-gb          .euc-gb
AddCharset euc-jp          .euc-jp
AddCharset euc-kr          .euc-kr
AddCharset EUC-TW          .euc-tw
AddCharset gb2312          .gb2312     .gb
AddCharset iso-10646-ucs-2 .ucs-2      .iso-10646-ucs-2
AddCharset iso-10646-ucs-4 .ucs-4      .iso-10646-ucs-4
AddCharset shift_jis       .shift_jis  .sjis
AddType application/x-gzip .gz .tgz
AddType application/x-compress .Z
AddType image/x-icon .ico
AddType text/html .xhtml
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
AddHandler cgi-script .cgi .pl
AddHandler type-map var
#EnableMMAP off
#EnableSendfile off
Alias "/error/" "/srv/www/error/"
<Directory "/srv/www/error">
    Options -All +IncludesNoExec
    AllowOverride None
    Order allow,deny
    Allow from all
    LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr
    ForceLanguagePriority Prefer Fallback
    AddOutputFilter Includes html
</Directory>
ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
ErrorDocument 410 /error/HTTP_GONE.html.var
ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
<IfModule info_module>
    <IfModule status_module>
        <Location "/server-status">
            SetHandler server-status
            Order deny,allow
            Deny from all
            Allow from localhost
        </Location>
        ExtendedStatus On
        <Location "/server-info">
            SetHandler server-info
            Order deny,allow
            Deny from all
            Allow from localhost
        </Location>
    </IfModule>
</IfModule>
<IfModule userdir_module>
    UserDir public_html
    <Directory "/home/*/public_html">
        Options -All +SymLinksIfOwnerMatch +IncludesNoExec
        AllowOverride FileInfo AuthConfig Limit Indexes
        <Limit GET POST OPTIONS>
            Order allow,deny
            Allow from all
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Order deny,allow
            Deny from all
        </LimitExcept>
    </Directory>
    <IfModule suexec_module>
        <Directory "/home/*/public_html/cgi-bin">
            Options -All +ExecCGI
            SetHandler cgi-script
        </Directory>
    </IfModule>
</IfModule>
<Location "/">
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/xml application/xhtml+xml
</Location>
<IfModule ssl_module>
    Listen 443
    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl .crl
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
    SSLPassPhraseDialog builtin
    SSLSessionCache shmcb:/var/run/ssl_scache(512000)
    SSLSessionCacheTimeout 300
    SSLMutex file:/var/run/ssl_mutex
    <VirtualHost _default_:443>
        ServerName www.domain.tld:443
        ServerAdmin webmaster@domain.tld
        DocumentRoot "/srv/www/htdocs-secure"
        <Directory "/srv/www/htdocs-secure">
            Options -All +FollowSymLinks
            AllowOverride Options FileInfo AuthConfig Limit
            Order allow,deny
            Allow from all
        </Directory>
        ErrorLog "/var/log/apache2/ssl_error_log"
        TransferLog "/var/log/apache2/ssl_access_log"
        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SSLCertificateFile "/etc/apache2/ssl/apache.crt"
        SSLCertificateKeyFile "/etc/apache2/ssl/apache.key"
        <FilesMatch ".(cgi|shtml|pl|php)$">
            SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory "/srv/www/cgi-bin">
            SSLOptions +StdEnvVars
        </Directory>
        BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
        CustomLog "/var/log/apache2/ssl_request_log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
    </VirtualHost>
</IfModule>
NameVirtualHost *:80
<VirtualHost _default_:80>
    ServerName www.domain.tld
    ServerAdmin webmaster@domain.tld
    DocumentRoot "/srv/www/htdocs"
    <Directory "/srv/www/htdocs">
        Options -All +FollowSymLinks
        AllowOverride Options FileInfo AuthConfig Limit
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
Include "/etc/apache2/vhosts.conf"
EOF

touch /etc/apache2/vhosts.conf
In der vhosts.conf definierst Du noch Deine vHosts und nimmst hierzu den Default-vHost als Muster. Sobald diese httpd.conf angepasst ist (Pfade und Modulnamen) und Dein Apache damit läuft, kümmern wir uns um den Rest. Ohne gemeinsame saubere Basis hat die Problemsuche/lösung nämlich keinen Sinn...

jack99
Posts: 25
Joined: 2007-06-15 13:54

Re: Apache / Wartungsseite einrichten

Post by jack99 » 2007-07-14 15:17

Hallo,

die Konfiguration ist sauber. Habe erst vor wenigen Tagen Debian Etch und Apache 2 installiert - es sind alles standard Einstellungen, SSL wird momentan nicht verwendet. Alle mod_rewrite ist korrekt installiert und php5 läuft als modul.

hier ist meine komllette apache2.conf (einige Dateien die included werden habe ich der übersichtlichkeithalber auskommentiert und den Inhalt direkt reigeschrieben).

Code: Select all

ServerRoot "/etc/apache2"
LockFile /var/lock/apache2/accept.lock

PidFile /var/run/apache2.pid

Timeout 300

KeepAlive On

MaxKeepAliveRequests 100
KeepAliveTimeout 15

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

User www-data
Group www-data


AccessFileName .htaccess

<Files ~ "^.ht">
    Order allow,deny
    Deny from all
</Files>

TypesConfig /etc/mime.types
DefaultType text/plain
HostnameLookups Off

ErrorLog /var/log/apache2/error.log

LogLevel warn

Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf

# Include ports listing
#Include /etc/apache2/ports.conf
Listen 80

# Include generic snippets of statements
##Include /etc/apache2/conf.d/
AddDefaultCharset ISO-8859-1


LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

ServerTokens Full

ServerSignature On

<IfModule alias_module>

    Alias /icons/ "/usr/share/apache2/icons/"

    <Directory "/usr/share/apache2/icons">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</IfModule>

<IfModule mod_autoindex.c>

    #
    # IndexOptions: Controls the appearance of server-generated directory
    # listings.
    #
    IndexOptions FancyIndexing VersionSort HTMLTable NameWidth=*

    #
    # AddIcon* directives tell the server which icon to show for different
    # files or filename extensions.  These are only displayed for
    # FancyIndexed directories.
    #
    AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

    AddIconByType (TXT,/icons/text.gif) text/*
    AddIconByType (IMG,/icons/image2.gif) image/*
    AddIconByType (SND,/icons/sound2.gif) audio/*
    AddIconByType (VID,/icons/movie.gif) video/*

    AddIcon /icons/binary.gif .bin .exe
    AddIcon /icons/binhex.gif .hqx
    AddIcon /icons/tar.gif .tar
    AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
    AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
    AddIcon /icons/a.gif .ps .ai .eps
    AddIcon /icons/layout.gif .html .shtml .htm .pdf
    AddIcon /icons/text.gif .txt
    AddIcon /icons/c.gif .c
    AddIcon /icons/p.gif .pl .py
    AddIcon /icons/f.gif .for
    AddIcon /icons/dvi.gif .dvi
    AddIcon /icons/uuencoded.gif .uu
    AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
    AddIcon /icons/tex.gif .tex
    AddIcon /icons/bomb.gif core

    AddIcon /icons/back.gif ..
    AddIcon /icons/hand.right.gif README
    AddIcon /icons/folder.gif ^^DIRECTORY^^
    AddIcon /icons/blank.gif ^^BLANKICON^^
    DefaultIcon /icons/unknown.gif
    ReadmeName README.html
    HeaderName HEADER.html
    IndexIgnore .??* *~ *# RCS CVS *,v *,t 
</IfModule>

<IfModule mod_mime.c>

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

    AddLanguage ca .ca
    AddLanguage cs .cz .cs
    AddLanguage da .dk
    AddLanguage de .de
    AddLanguage el .el
    AddLanguage en .en
    AddLanguage eo .eo
    AddLanguage es .es
    AddLanguage et .et
    AddLanguage fr .fr
    AddLanguage he .he
    AddLanguage hr .hr
    AddLanguage it .it
    AddLanguage ja .ja
    AddLanguage ko .ko
    AddLanguage ltz .ltz
    AddLanguage nl .nl
    AddLanguage nn .nn
    AddLanguage no .no
    AddLanguage pl .po
    AddLanguage pt .pt
    AddLanguage pt-BR .pt-br
    AddLanguage ru .ru
    AddLanguage sv .sv
    AddLanguage zh-CN .zh-cn
    AddLanguage zh-TW .zh-tw
</IfModule>

<IfModule mod_negotiation.c>
    LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW


    ForceLanguagePriority Prefer Fallback

</IfModule>

<IfModule mod_mime.c>

    AddCharset us-ascii    .ascii .us-ascii
    AddCharset ISO-8859-1  .iso8859-1  .latin1
    AddCharset ISO-8859-2  .iso8859-2  .latin2 .cen
    AddCharset ISO-8859-3  .iso8859-3  .latin3
    AddCharset ISO-8859-4  .iso8859-4  .latin4
    AddCharset ISO-8859-5  .iso8859-5  .cyr .iso-ru
    AddCharset ISO-8859-6  .iso8859-6  .arb .arabic
    AddCharset ISO-8859-7  .iso8859-7  .grk .greek
    AddCharset ISO-8859-8  .iso8859-8  .heb .hebrew
    AddCharset ISO-8859-9  .iso8859-9  .latin5 .trk
    AddCharset ISO-8859-10  .iso8859-10  .latin6
    AddCharset ISO-8859-13  .iso8859-13
    AddCharset ISO-8859-14  .iso8859-14  .latin8
    AddCharset ISO-8859-15  .iso8859-15  .latin9
    AddCharset ISO-8859-16  .iso8859-16  .latin10
    AddCharset ISO-2022-JP .iso2022-jp .jis
    AddCharset ISO-2022-KR .iso2022-kr .kis
    AddCharset ISO-2022-CN .iso2022-cn .cis
    AddCharset Big5        .Big5       .big5 .b5
    AddCharset cn-Big5     .cn-big5
    # For russian, more than one charset is used (depends on client, mostly):
    AddCharset WINDOWS-1251 .cp-1251   .win-1251
    AddCharset CP866       .cp866
    AddCharset KOI8      .koi8
    AddCharset KOI8-E      .koi8-e
    AddCharset KOI8-r      .koi8-r .koi8-ru
    AddCharset KOI8-U      .koi8-u
    AddCharset KOI8-ru     .koi8-uk .ua
    AddCharset ISO-10646-UCS-2 .ucs2
    AddCharset ISO-10646-UCS-4 .ucs4
    AddCharset UTF-7       .utf7
    AddCharset UTF-8       .utf8
    AddCharset UTF-16      .utf16
    AddCharset UTF-16BE    .utf16be
    AddCharset UTF-16LE    .utf16le
    AddCharset UTF-32      .utf32
    AddCharset UTF-32BE    .utf32be
    AddCharset UTF-32LE    .utf32le
    AddCharset euc-cn      .euc-cn
    AddCharset euc-gb      .euc-gb
    AddCharset euc-jp      .euc-jp
    AddCharset euc-kr      .euc-kr
    #Not sure how euc-tw got in - IANA doesn't list it???
    AddCharset EUC-TW      .euc-tw
    AddCharset gb2312      .gb2312 .gb
    AddCharset iso-10646-ucs-2 .ucs-2 .iso-10646-ucs-2
    AddCharset iso-10646-ucs-4 .ucs-4 .iso-10646-ucs-4
    AddCharset shift_jis   .shift_jis .sjis

    AddHandler type-map var
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>


<IfModule mod_setenvif.c>

    BrowserMatch "Mozilla/2" nokeepalive
    BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0
    BrowserMatch "RealPlayer 4.0" force-response-1.0
    BrowserMatch "Java/1.0" force-response-1.0
    BrowserMatch "JDK/1.0" force-response-1.0

    BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
    BrowserMatch "MS FrontPage" redirect-carefully
    BrowserMatch "^WebDrive" redirect-carefully
    BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
    BrowserMatch "^gnome-vfs/1.0" redirect-carefully
    BrowserMatch "^XML Spy" redirect-carefully
    BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
</IfModule>

NameVirtualHost xxx.xxx.xxx.xxx:80
DocumentRoot "/var/www"
UseCanonicalName Off

<Directory />
	Options +FollowSymLinks
	AllowOverride none
</Directory>


<VirtualHost xxx.xxx.xxx.xxx:80>
ServerName testdomain.de
ServerAlias  *.testdomain.de
DocumentRoot /var/www/vhosts/www-user/html/testdomain.de
SuexecUserGroup www-user www-data

<Directory "/var/www/vhosts/www-user/html/testdomain.de">
Options +FollowSymLinks
</Directory>
</VirtualHost>

RewriteLog "/var/log/apache2/mod_rewrite.log"
RewriteLogLevel 5
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^88.76.202.104
RewriteRule !wartungsarbeiten.html /var/www/vhosts/www-user/wartung/wartungsarbeiten.html [L]
Wie gesagt die Config ist so gut wie im Ursprungszustand. Da wird auch nichts am ende auch nichts mehr included oder irgendwelche Parameter überschrieben.

Mal eine andere Frage, hast Du die folgende Lösung bei Dir getestet, funktioniert es auf deinem Server?

NameVirtualHost xxx.xxx.xxx.xxx:80
DocumentRoot "/var/www"
UseCanonicalName Off

<Directory />
Options +FollowSymLinks
AllowOverride none
</Directory>


<VirtualHost xxx.xxx.xxx.xxx:80>
ServerName testdomain.de
ServerAlias *.testdomain.de
DocumentRoot /var/www/vhosts/www-user/html/testdomain.de
SuexecUserGroup www-user www-data

<Directory "/var/www/vhosts/www-user/html/testdomain.de">
Options +FollowSymLinks
</Directory>
</VirtualHost>

RewriteLog "/var/log/apache2/mod_rewrite.log"
RewriteLogLevel 5
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^88.76.202.104
RewriteRule !wartungsarbeiten.html /var/www/vhosts/www-user/wartung/wartungsarbeiten.html [L]

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Apache / Wartungsseite einrichten

Post by Joe User » 2007-07-14 15:36

jack99 wrote:

Code: Select all

# Include generic snippets of statements
##Include /etc/apache2/conf.d/
AddDefaultCharset ISO-8859-1
AddDefaultCharset setzt man nicht, raus damit.
jack99 wrote:

Code: Select all

NameVirtualHost xxx.xxx.xxx.xxx:80
DocumentRoot "/var/www"
UseCanonicalName Off

<Directory />
	Options +FollowSymLinks
	AllowOverride none
</Directory>


<VirtualHost xxx.xxx.xxx.xxx:80>
ServerName testdomain.de
ServerAlias  *.testdomain.de
DocumentRoot /var/www/vhosts/www-user/html/testdomain.de
SuexecUserGroup www-user www-data

<Directory "/var/www/vhosts/www-user/html/testdomain.de">
Options +FollowSymLinks
</Directory>
</VirtualHost>

RewriteLog "/var/log/apache2/mod_rewrite.log"
RewriteLogLevel 5
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^88.76.202.104
RewriteRule !wartungsarbeiten.html /var/www/vhosts/www-user/wartung/wartungsarbeiten.html [L]
Wie folgt abändern:

Code: Select all

UseCanonicalName On
<Directory "/">
    Options -All +FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
ServerName domain.tld:80
ServerAdmin webmaster@domain.tld
DocumentRoot "/var/www"

NameVirtualHost *:80
<VirtualHost xxx.xxx.xxx.xxx:80>
    ServerName domain.tld
    ServerAlias *.domain.tld
    ServerAdmin webmaster@domain.tld
    DocumentRoot "/var/www/vhosts/www-user/html/domain.tld"
    <Directory "/var/www/vhosts/www-user/html/domain.tld">
        Options -All +FollowSymLinks
        AllowOverride Options FileInfo AuthConfig Limit
        Order allow,deny
        Allow from all
    </Directory>
    SuexecUserGroup www-user www-data
    RewriteEngine On
    RewriteLog "/var/log/apache2/mod_rewrite.log"
    RewriteLogLevel 5
    RewriteCond %{REMOTE_ADDR} !^88.76.202.104
    RewriteRule !wartungsarbeiten.html http://domain.tld/wartungsarbeiten.html [R,L]
</VirtualHost>
Sollte funktionieren.

jack99
Posts: 25
Joined: 2007-06-15 13:54

Re: Apache / Wartungsseite einrichten

Post by jack99 » 2007-07-15 12:40

@joe user
erst mal danke für Deine Hilfe.

Das Problem ist ja möglichst einfach eine globale Umleitung für alle vHosts zu einer Wartungsarbeiten-Seite zu realisieren. Das Besondere: damit der Admin die Möglichkeit hat die vHosts während der Wartungsarbeiten zu testen, sollten Anfragen von bestimmten IP-Adressen von der Umleitung ausgeschlossen werden. Natürlich sollte die Handhabung möglichst einfach sein, d.h. am besten so eine Art Schalter/Weiche für Normal- bzw. Wartungsbetrieb des Servers den man nach Bedarf umlegen kann ohne zig andere Sachen zuvor beachten oder ändern zu müssen.

Eine Lösung mittels

Code: Select all

<Directory /> 
   Options FollowSymLinks 
   AllowOverride none 
   Order allow,deny 
   Deny from all 
   Allow from 88.76.202.104 
</Directory>
wäre mit dem Nachteil verbunden, dass diese Einstellungen von .htaccess-Dateien komplett überschrieben werden können. Es sei denn man würde keine .htaccess Dateien zulassen – dies wäre jedoch eine für viele Webmaster unakzeptable Einschränkung.

Eine andere Idee ist eine IP-abhängige Umleitung mittels mod_rewrite wie folgt:

Code: Select all

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^88.76.206.188
RewriteRule !wartungsarbeiten.html /var/www/wartung/wartungsarbeiten.html [L]
Die Idee war dabei die Rewrite-Direktiven im globalen Server-Kontext zu verwenden (nicht innerhalb der vHost, denn dazu wäre ja eine entsprechende Ergänzung bei allen vhsost erforderlich) damit die Anfrage noch vor den vHosts verarbeitet und die Umleitung sofort ausgeführt werden kann. Obwohl die Umleitung laut meinem mod_rewrite.log richtig verarbeitet wurde, fand diese trotzdem nicht statt. Warum, ist mir noch nicht ganz klar?

Nun hat joe vorgeschlagen, die Rewrite-Direktiven direkt in den VirtualHost-Containern einzufügen.

Positiv: die Umleitung funktioniert wie gewünscht
Nachteil: hoher Arbeitsaufwand bei vielen vHosts wenn man jedes mal beim Wechsel des Serverbetriebs alles ändern muss.

Lösung: anstatt die Rewrite-Direktiven direkt in alle vHosts einzufügen fügt man am Ende eines jeden VirtualHost eine include-Direktive mit dem Pfad zu einer Datei z.B. wartung.conf

Code: Select all

<VirtualHost xxx.xxx.xxx.xxx:80> 
 ServerName testdomain.de 
 ServerAlias  *.testdomain.de 
 DocumentRoot /var/www/vhosts/www-user/html/testdomain.de 
 SuexecUserGroup www-user www-data 
 <Directory "/var/www/vhosts/www-user/html/testdomain.de"> 
  Options +FollowSymLinks 
 </Directory>
include /etc/apache2/wartung.conf
</VirtualHost>
die Datei wartung.conf hat dann im normalen Serverbetrieb den folgenden Inhalt:

wartung.conf

Code: Select all

#RewriteEngine On
#RewriteCond %{REMOTE_ADDR} !^88.76.206.188
#RewriteRule !wartungsarbeiten.html /var/www/wartung/wartungsarbeiten.html [L]
D.h. die Umleitung ist komplett deaktiviert.

Im Wartungsbetrieb werden nur die 3 Rauten entfernt und bei Bedarf die von Umleitung ausgeschlossene IP oder IP´s ergänzt:

Code: Select all

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^88.76.206.188|88.76.206.189|88.76.206.190
RewriteRule !wartungsarbeiten.html /var/www/wartung/wartungsarbeiten.html [L]
Positiv: - einfache Umschaltung zwischen Wartungs- und Normalbetrieb
- Admin kann vHosts im Wartungsbetrieb testen
- Keine Änderungen an den vHost-Dateien, keine doppelten Test-vHosts-Dateien, keine weiteren IP-Adressen oder ähnliches erforderlich
- .htaccess und AllowOverride müssen nicht beachtet werden

Negativ: - es muss einmalig bei allen vHosts „include /etc/apache2/wartung.conf" eingefügt werden.

Vielen Dank noch mal an alle die sich an der Diskussion aktiv beteiligt haben. Ich denke unter dem Strich ist eine wirklich vernünftige Lösung rausgekommen.

Vielleicht hat ja jemand noch eine bessere Idee ;-)

Viele Grüße
jack