Instalando e executando Apache2.2 e Apache2.4 simultaneamente no mesmo servidor

Instalando e executando Apache2.2 e Apache2.4 simultaneamente no mesmo servidor

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

informação relacionada