Instalar y ejecutar apache2.2 y apache2.4 simultáneamente en el mismo servidor

Instalar y ejecutar apache2.2 y apache2.4 simultáneamente en el mismo servidor

Necesitamos ejecutar servidores web Apache 2.2 y Apache 2.4 en la misma máquina virtual. La necesidad es creada por:

  • Un requisito para alojar un módulo Oracle WebGate, que no es compatible con Apache 2.4 (utilizamos el httpd 2.2 proporcionado por Red Hat para eso)
  • Un requisito para utilizar sesiones nativas de Apache 2.4, en asociación con el procesamiento WebGate
  • Una limitación en la cantidad de VM que podemos usar (requiriendo que ambos servidores web estén en la misma VM)

Todo esto tiene que ocurrir en una VM RHEL 5.8 (tenga en cuenta que no hay Red Hat RPM para Apache 2.4 para RHEL5 [ni 6, en realidad]). Nuestra intención general es que la instancia 2.2 actúe como un proxy inverso para una instancia 2.4 que escucha el puerto localhost (que a su vez actúa como un proxy inverso para nuestros servidores de origen). Configurar para evitar conflictos de puertos, manejar el proxy, etc. no es un problema, estoy bien versado en eso. Lo que no estoy seguro es el enfoque general para tener ambas versiones del servidor instaladas y operativas al mismo tiempo.

¿Alguien ha hecho esto antes? Y si es así, ¿cuál fue su enfoque general? ¿Funcionó limpiamente al tener ambas versiones instaladas juntas o tuvo que, por ejemplo, hacer chroot en una para crear una separación entre las bibliotecas? ¿O vinculaste estáticamente todo lo necesario para el binario 2.4, o qué? Ejecutamos SELinux en modo obligatorio: ¿hay alguna implicación a tener en cuenta en ese frente?

No he buscado en Google a nadie que haya hecho algo similar, esperando que alguien aquí lo haya hecho.

¡Gracias!

Respuesta1

Puede compilar httpd-2.4 desde el código fuente, antes que nada necesita actualizar apr/apr-util a al menos 1.3.0

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

Construya e instale apr-1.4.8

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

Compile e instale 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

Construya e instale 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

Yo sugeriría no tocar los paquetes apr/apr-util del sistema.

Algunas comprobaciones básicas

# 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"

Sé que compilar paquetes desde el código fuente es una mala idea, pero a veces es la única salida.

información relacionada