Gleichzeitiges Installieren und Ausführen von Apache2.2 und Apache2.4 auf demselben Server

Gleichzeitiges Installieren und Ausführen von Apache2.2 und Apache2.4 auf demselben Server

Wir müssen Apache 2.2- und Apache 2.4-Webserver auf derselben VM ausführen. Der Bedarf entsteht durch:

  • Voraussetzung ist das Hosten eines Oracle WebGate-Moduls, das Apache 2.4 nicht unterstützt (wir verwenden hierfür das von Red Hat bereitgestellte 2.2 httpd).
  • Voraussetzung für die Verwendung nativer Apache 2.4-Sitzungen in Verbindung mit der WebGate-Verarbeitung
  • Eine Beschränkung der Anzahl der VMs, die wir verwenden können (beide Webserver müssen sich in derselben VM befinden)

Dies alles muss auf einer RHEL 5.8 VM erfolgen (beachten Sie, dass es für RHEL5 [eigentlich auch nicht 6] kein Red Hat RPM für Apache 2.4 gibt). Unsere allgemeine Absicht ist, dass die 2.2-Instanz als Reverse-Proxy für eine 2.4-Instanz fungiert, die auf dem lokalen Host-Port lauscht (und selbst als Reverse-Proxy für unsere Ursprungsserver fungiert). Die Konfiguration zur Vermeidung von Portkonflikten, zur Handhabung des Proxyings usw. ist kein Problem, ich kenne mich damit gut aus. Ich bin mir beim allgemeinen Ansatz, beide Serverversionen gleichzeitig zu installieren und betriebsbereit zu haben, nicht sicher.

Hat das schon mal jemand gemacht? Und wenn ja, wie war Ihr genereller Ansatz? Hat es reibungslos funktioniert, beide Versionen zusammen zu installieren, oder mussten Sie z. B. eine Version chrooten, um eine Trennung zwischen den Bibliotheken zu schaffen? Oder haben Sie alles, was für die 2.4-Binärdatei benötigt wird, statisch verknüpft, oder was? Wir führen SELinux im Durchsetzungsmodus aus – gibt es diesbezüglich irgendwelche Auswirkungen, die man beachten sollte?

Beim Googeln habe ich nichts gefunden, da mir jemand etwas Ähnliches passiert ist, und hoffe, dass es hier jemanden gibt, der das getan hat.

Danke schön!

Antwort1

Sie können httpd-2.4 aus dem Quellcode erstellen. Zunächst müssen Sie apr/apr-util auf mindestens 1.3.0 aktualisieren.

checking for APR version 1.3.0 or later... yes
checking for APR-util version 1.3.0 or later... yes

Erstellen und installieren Sie apr-1.4.8

# ./configure --prefix=/opt/apr-1.4.8
# make
# make install

Erstellen und installieren Sie apr-util-1.5.2

# ./configure --prefix=/opt/apr-util-1.5.2 --with-apr=/opt/apr-1.4.8/ --with-crypto --with-openssl=/usr --with-ldap --with-ldap-include=/usr/include/ --with-ldap-lib=/usr/lib64/
# make
# make install

Erstellen und installieren Sie Apache-2.4.6

# ./configure --prefix=/opt/httpd-2.4.6 --with-apr=/opt/apr-1.4.8/ --with-apr-util=/opt/apr-util-1.5.2/
# make
# make install

Ich würde vorschlagen, die Systempakete apr/apr-util nicht anzufassen

Einige grundlegende Kontrollen

# lsof -n -P -i tcp:8080
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   29268   root    4u  IPv4  57621      0t0  TCP 127.0.0.1:8080 (LISTEN)
httpd   29269 daemon    4u  IPv4  57621      0t0  TCP 127.0.0.1:8080 (LISTEN)
httpd   29270 daemon    4u  IPv4  57621      0t0  TCP 127.0.0.1:8080 (LISTEN)
httpd   29273 daemon    4u  IPv4  57621      0t0  TCP 127.0.0.1:8080 (LISTEN)

# cat /proc/29268/cmdline
/opt/httpd-2.4.6/bin/httpd

# /opt/httpd-2.4.6/bin/httpd -V
Server version: Apache/2.4.6 (Unix)
Server built:   Aug 30 2013 14:33:24
Server's Module Magic Number: 20120211:23
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/opt/httpd-2.4.6"
 -D SUEXEC_BIN="/opt/httpd-2.4.6/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

# lsof -n -P -i tcp:80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   29392   root    4u  IPv4  58386      0t0  TCP *:80 (LISTEN)
httpd   29394 apache    4u  IPv4  58386      0t0  TCP *:80 (LISTEN)
httpd   29395 apache    4u  IPv4  58386      0t0  TCP *:80 (LISTEN)
httpd   29396 apache    4u  IPv4  58386      0t0  TCP *:80 (LISTEN)
httpd   29397 apache    4u  IPv4  58386      0t0  TCP *:80 (LISTEN)
httpd   29398 apache    4u  IPv4  58386      0t0  TCP *:80 (LISTEN)
httpd   29399 apache    4u  IPv4  58386      0t0  TCP *:80 (LISTEN)
httpd   29400 apache    4u  IPv4  58386      0t0  TCP *:80 (LISTEN)
httpd   29401 apache    4u  IPv4  58386      0t0  TCP *:80 (LISTEN)

 # cat /proc/29392/cmdline
/usr/sbin/httpd

# /usr/sbin/httpd -V
Server version: Apache/2.2.3
Server built:   Aug 13 2013 13:27:54
Server's Module Magic Number: 20051115:3
Server loaded:  APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

Ich weiß, dass es keine gute Idee ist, Pakete aus dem Quellcode zu erstellen, aber manchmal ist es der einzige Ausweg

verwandte Informationen