Ein kurzer Abriss wie man unter Debian 8 / Ubuntu 16.04 multiple Instanzen des Apache Webservers anlegt. Hier eine kleiner Überblick von der Debian Wiki Seite. Die originalen Konfigurationsdateien des Apache dienen als Template für jede neu erstellte Instanz und sollten somit nicht gelöscht werden. Das von Debian zur Verfügung gestellte Script wird mit einem frei zu vergebenen Suffix/Namen aufgerufen.
:~# sh /usr/share/doc/apache2/examples/setup-instance zzz Setting up /etc/apache2-zzz ... Setting up /etc/init.d/apache2-zzz ... Setting up symlinks: a2enmod-zzz a2dismod-zzz a2ensite-zzz a2dissite-zzz a2enconf-zzz a2disconf-zzz apache2ctl-zzz Setting up /etc/logrotate.d/apache2-zzz and /var/log/apache2-zzz ...
Wie man sieht, werden alle gewohnten Apache-Tools für die neue Instanz erzeugt. Das Start/Stop Script sourced das originale Script, weshalb die originale Konfiguration des Apache nicht gelöscht werden darf.
:~# ll -ld /etc/init.d/apache2* -rwxr-xr-x 1 root root 8087 Apr 5 23:15 /etc/init.d/apache2* -rwxr-xr-x 1 root root 524 Sep 22 10:28 /etc/init.d/apache2-zzz* :~# cat /etc/init.d/apache2-zzz [...] # source original init script to keep $0 and other arguments . /etc/init.d/apache2
Es wird ebenfalls ein komplett neuer Apache Konfigurationsbaum aus dem bestehenden Original kopiert. Weshalb man das Original nicht löschen sollte.
:~# cd /etc/apache2-zzz :~# ls -la insgesamt 80 drwxr-xr-x 8 root root 4096 Sep 22 10:35 . drwxr-xr-x 92 root root 4096 Sep 22 10:28 .. -rw-r--r-- 1 root root 7137 Sep 22 10:35 apache2.conf drwxr-xr-x 2 root root 4096 Aug 25 09:29 conf-available drwxr-xr-x 2 root root 4096 Aug 24 17:43 conf-enabled -rw-r--r-- 1 root root 1782 Mär 19 2016 envvars -rw-r--r-- 1 root root 31063 Mär 19 2016 magic drwxr-xr-x 2 root root 4096 Aug 24 17:47 mods-available drwxr-xr-x 2 root root 4096 Aug 24 17:47 mods-enabled -rw-r--r-- 1 root root 324 Sep 22 10:30 ports.conf drwxr-xr-x 2 root root 4096 Sep 22 10:32 sites-available drwxr-xr-x 2 root root 4096 Aug 24 17:43 sites-enabled
Die neue Instanz wird dem Init-System bekannt gemacht.
:~# service apache2-zzz status apache2-zzz.service Loaded: not-found (Reason: No such file or directory) Active: inactive (dead) :~# systemctl enable apache2-zzz apache2-zzz.service is not a native service, redirecting to systemd-sysv-install Executing /lib/systemd/systemd-sysv-install enable apache2-zzz :~# service apache2-zzz status apache2-zzz.service - LSB: Start/stop apache2 web server (config /etc/apache2-zzz) Loaded: loaded (/etc/init.d/apache2-zzz; bad; vendor preset: enabled) Active: inactive (dead) Docs: man:systemd-sysv-generator(8)
Wenn man die obigen Schritte für eine weitere Instanz yyy ausführt und diese zur schnellen Veranschaulichung den Port an zwei Stellen ändert,
:~# vim /etc/apache2-yyy/ports.conf Listen 81 :~# vim /etc/apache2-yyy/sites-enabled/000-default.conf <VirtualHost *:81>
lassen sich entsprechend für den Konfigurationcheck das Starten usw die Apache-Tools mit dem angegebenen Suffix wie gewohnt verwenden.
:~# apache2ctl-zzz configtest Syntax OK :~# apache2ctl-yyy configtest Syntax OK :~# apache2ctl-zzz start :~# apache2ctl-yyy start
Nach dem Start laufen zwei getrennte Apache Instanzen.
/usr/sbin/apache2 -d /etc/apache2-zzz -k start \_ /usr/sbin/apache2 -d /etc/apache2-zzz -k start \_ /usr/sbin/apache2 -d /etc/apache2-zzz -k start \_ /usr/sbin/apache2 -d /etc/apache2-zzz -k start \_ /usr/sbin/apache2 -d /etc/apache2-zzz -k start \_ /usr/sbin/apache2 -d /etc/apache2-zzz -k start /usr/sbin/apache2 -d /etc/apache2-yyy -k start \_ /usr/sbin/apache2 -d /etc/apache2-yyy -k start \_ /usr/sbin/apache2 -d /etc/apache2-yyy -k start \_ /usr/sbin/apache2 -d /etc/apache2-yyy -k start \_ /usr/sbin/apache2 -d /etc/apache2-yyy -k start \_ /usr/sbin/apache2 -d /etc/apache2-yyy -k start
Reboot-Festigkeit
Wenn man den default Apache per
:~# systemctl disable apache2 apache2.service is not a native service, redirecting to systemd-sysv-install Executing /lib/systemd/systemd-sysv-install disable apache2 insserv: warning: current start runlevel(s) (empty) of script `apache2' overrides LSB defaults (2 3 4 5). insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `apache2' overrides LSB defaults (0 1 6).
vom boot Prozess herausnimmt, wird man festellen, dass die angelegten neuen Apache Instanzen nach einem Reboot nicht wieder starten. Dies liegt anscheinend an einem vergessenen $SUFFIX in der envvars. Nach dem Reboot ist das unter tmpfs stehende Verzeichnis /var/run/apache2 nicht mehr vorhanden und die einzelnen Apache Instanzen können keine .pid Files mehr anlegen. Der Vorgang wurde als Bug-Report im Ubuntu-Launchpad und bei Debian bekannt gemacht.
:~# cat /var/log/apache2-zzz/error.log [...] [Sat Sep 24 11:10:00.566132 2016] [core:error] [pid 2229] AH00100: apache2: could not log pid to file /var/run/apache2/apache2-zzz.pid [...]
In jedem Instanzen envvars muss die PID Zeile um eine $SUFFIX erweitert werden.
:~# vim /etc/apache2-zzz/envvars [...] #export APACHE_PID_FILE=/var/run/apache2/apache2$SUFFIX.pid export APACHE_PID_FILE=/var/run/apache2$SUFFIX/apache2$SUFFIX.pid
Nach dem Reboot laufen die Instanzen mit ihrem entsprechenden .pid File in ihren getrennten Verzeichnissen.
:~$ ls -la /var/run/apache2-* /var/run/apache2-zzz: [...] -rw-r--r-- 1 root root 5 Sep 24 11:52 apache2-zzz.pid /var/run/apache2-yyy: [...] -rw-r--r-- 1 root root 5 Sep 24 11:52 apache2-yyy.pid
Patch für /etc/apache2/envvars
:~$ cat envvars.patch --- envvars 2016-09-25 10:54:40.901929219 +0200 +++ envvars.new 2016-09-25 10:54:08.113544407 +0200 @@ -16,7 +16,7 @@ fi export APACHE_RUN_USER=www-data export APACHE_RUN_GROUP=www-data # temporary state file location. This might be changed to /run in Wheezy+1 -export APACHE_PID_FILE=/var/run/apache2/apache2$SUFFIX.pid +export APACHE_PID_FILE=/var/run/apache2$SUFFIX/apache2$SUFFIX.pid export APACHE_RUN_DIR=/var/run/apache2$SUFFIX export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX # Only /var/log/apache2 is handled by /etc/logrotate.d/apache2.