
Precisamos executar os servidores web Apache 2.2 e Apache 2.4 na mesma VM. A necessidade é criada por:
- Um requisito para hospedar um módulo Oracle WebGate, que não suporta Apache 2.4 (usamos o httpd 2.2 fornecido pela Red Hat para isso)
- Um requisito para usar sessões nativas do Apache 2.4, em associação com o processamento WebGate
- Uma limitação no número de VMs que podemos usar (exigindo que ambos os servidores web estejam na mesma VM)
Tudo isso deve ocorrer em uma VM RHEL 5.8 (observe que não há Red Hat RPM para Apache 2.4 para RHEL5 [nem 6, na verdade]). Nossa intenção geral é fazer com que a instância 2.2 atue como um proxy reverso para uma instância 2.4 de escuta de porta localhost (que por sua vez atua como um proxy reverso para nossos servidores de origem). Configurar para evitar conflitos de porta, para lidar com proxy, etc. não é um problema, sou bem versado nisso. Não tenho certeza da abordagem geral para ter as duas versões do servidor instaladas e operacionais ao mesmo tempo.
Alguém já fez isso antes? E se sim, qual foi a sua abordagem geral? Funcionou perfeitamente com as duas versões instaladas juntas ou você teve que, por exemplo, fazer chroot para criar separação entre as bibliotecas? Ou você vinculou estaticamente tudo o que era necessário para o binário 2.4, ou o quê? Executamos o SELinux no modo de aplicação - há alguma implicação a ser observada nesse aspecto?
Não procurei no Google por alguém que tenha feito algo semelhante, esperando que alguém aqui o tenha feito.
Obrigado!
Responder1
Você pode construir o httpd-2.4 a partir do código-fonte, primeiro você precisa atualizar o apr/apr-util para pelo 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
Construir e instalar abril-1.4.8
# ./configure --prefix=/opt/apr-1.4.8
# make
# make install
Construa 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
Construa e instale o 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
Eu sugeriria não tocar nos pacotes apr/apr-util do sistema
Algumas verificações 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"
Eu sei que construir pacotes a partir do código-fonte é uma má ideia, mas às vezes é a única saída