Flexible Apache Konfiguration - Mehrere Konfigurationen und unabhängige Server auf einem System

Problem

Auf einem Webserver sind mehrere virtuelle Hosts auf unterschiedlichen IP-Adressen (IP-Alias-Interface) konfiguriert. Will man jetzt Konfigurationsänderungen durchführen, so ist ein Neustart für alle Adressen unabdingbar. Hat man jedoch genügend Resourcen auf dem Webserver vorhanden, so kann man für jede IP-Adresse einen eigenen Konfigurationspfad definieren, und auch die Dienste nach IP-Adresse unabhängig durchstarten.

Lösung

Hier am Beispiel RedHat Enterprise Linux 4. Es ist ein neuer Webserver mit IP-Konfiguration auf IP-Adresse 127.0.0.2 einzurichten.

TODO

export VIRTIP=127.0.0.2
cp -a /etc/httpd /etc/httpd.$VIRTIP
ln -s /usr/sbin/httpd /usr/sbin/httpd.$VIRTIP
cat << EOF > /etc/sysconfig/httpd.$VIRTIP
VIRTUAL_IP=$VIRTIP
HTTPD=/usr/sbin/httpd.\$VIRTUAL_IP
OPTIONS="-d /etc/httpd.\$VIRTUAL_IP"
PIDFILE="/var/run/httpd.\$VIRTUAL_IP.pid"
LOCKFILE="/var/lock/subsys/httpd.\$VIRTUAL_IP"
EOF

/etc/init.d/httpd.$VIRTIP patchen

--- /etc/init.d/httpd   2007-01-30 15:58:34.000000000 +0100
+++ /etc/init.d/httpd.127.0.0.3 2007-09-18 10:09:53.000000000 +0200
@@ -6,15 +6,17 @@
 # description: Apache is a World Wide Web server.  It is used to serve \
 #             HTML files and CGI.
 # processname: httpd
-# config: /etc/httpd/conf/httpd.conf
-# config: /etc/sysconfig/httpd
-# pidfile: /var/run/httpd.pid
+# config: /etc/httpd.$VIRTUAL_IP/conf/httpd.conf
+# config: /etc/sysconfig/httpd.$VIRTUAL_IP
+# pidfile: /var/run/httpd.$VIRTUAL_IP.pid
 
 # Source function library.
 . /etc/rc.d/init.d/functions
 
-if [ -f /etc/sysconfig/httpd ]; then
-        . /etc/sysconfig/httpd
+VIRTUAL_IP=127.0.0.2
+
+if [ -f /etc/sysconfig/httpd.$VIRTUAL_IP ]; then
+        . /etc/sysconfig/httpd.$VIRTUAL_IP
 fi
 
 # Start httpd in the C locale by default.
@@ -30,15 +32,15 @@
 
 # Path to the apachectl script, server binary, and short-form for messages.
 apachectl=/usr/sbin/apachectl
-httpd=${HTTPD-/usr/sbin/httpd}
+httpd=${HTTPD-/usr/sbin/httpd.$VIRTUAL_IP}
 prog=httpd
-pidfile=${PIDFILE-/var/run/httpd.pid}
-lockfile=${LOCKFILE-/var/lock/subsys/httpd}
+pidfile=${PIDFILE-/var/run/httpd.$VIRTUAL_IP.pid}
+lockfile=${LOCKFILE-/var/lock/subsys/httpd.$VIRTUAL_IP}
 RETVAL=0
 
 # check for 1.3 configuration
 check13 () {
-       CONFFILE=/etc/httpd/conf/httpd.conf
+       CONFFILE=/etc/httpd.$VIRTUAL_IP/conf/httpd.conf
        GONE="(ServerType|BindAddress|Port|AddModule|ClearModuleList|"
        GONE="${GONE}AgentLog|RefererLog|RefererIgnore|FancyIndexing|"
        GONE="${GONE}AccessConfig|ResourceConfig)"

Jetzt ist es möglich, die einzelnen Webserver mittels service httpd.$VIRTUAL_IP zu starten und zu stoppen.

Pitfalls

Die Basiskonfiguration unter /etc/httpd/conf/httpd.conf darf nicht mehr global auf :80 lauschen, sondern muss virtuell gesetzt werden, das gleiche gilt für das PID-File, d.h.

  • Listen 127.0.0.1:80
  • ServerRoot muss auf /etc/httpd.$VIRT_IP gesetzt sein.
 
wissen/gpl/apache/apache-webserver-multihost-konfiguration-mehrere-unabhaengige-server-auf-einem-rechner.txt · Zuletzt geändert: 05.09.2010 20:31
 
Recent changes RSS feed Donate Valid XHTML 1.0 Valid CSS Recent cached RSS feed cacert-signed web site: inhalt.serviert.de