
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.