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.
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.
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:80ServerRoot muss auf /etc/httpd.$VIRT_IP gesetzt sein.