13/05/2013

Instalar Apache 2.4 en Amazon Web Services

El objetivo es poder utilizar un único dominio para acceder a distintas instalaciones de una misma o de varias aplicaciones web instaladas en diferentes máquinas y servidores de aplicaciones; para ello hemos utilizado el Apache httpd Web Server de tal manera que permita redirigir las peticiones a diferentes servidores de aplicaciones en función de nuestras necesidades.

La versión instalada de Apache httpd Web Server es la 2.4, ya que ésta incluye el módulo de proxy_html; si se quiere instalar la versión 2.2 de Apache, es necesario añadir el módulo expresamente. Es necesario compilar el Apache con GCC e instalar el Apache Portable Runtime y una versión de Java 1.6 o superior.

Pasos en la instalación:

Instalar JDK

cd /usr/java
./jdk-6u38-linux-x64.bin

Instalación de APR (Apache Portable Runtime)

sudo yum -y install arp apr-devel apr-util apr-util-devel pcre pcre-devel

Instalación de GCC (GNU Compiler Collection)

sudo mkdir /home/ec2-user/gcc
cd /home/ec2-user/gcc
sudo yum install gcc

Instalar el Apache

cd /home/ec2-user/httpd****
./configure
sudo yum install make
sudo make
sudo make install

Apache httpd Web Server se instala por defecto en la ruta /usr/local/apache2/

Configurar el httpd Web Server

La configuración del Apache se define en el fichero /usr/local/apache2/conf/httpd.conf. Antes de comenzar a realizar modificaciones es importante hacer una copia de este fichero para restaurarla en caso de ser necesario. Nuestro Apache recibe peticiones por el puerto 8009, que es uno de los que se habilitan en la política de seguridad de Amazon para el Tomcat

Módulos que deben estar activos

Hemos activado todos los módulos excepto (configurar en función de las necesidades)
#LoadModule authz_host_module modules/mod_authz_host.so
#LoadModule session_crypto_module modules/mod_session_crypto.so
Es importante incluir estos módulos para poder configurar el proxy
LoadFile /usr/lib64/libxml2.so.2
LoadModule xml2enc_module modules/mod_xml2enc.so
LoadModule proxy_html_module modules/mod_proxy_html.so

Configuración del fichero /usr/local/apache2/conf/httpd.conf/httpd.conf

<IfModule mod_proxy.c>
    ProxyPreserveHost On
    ProxyHTMLEnable On

    ProxyPass /manager/ http://1.2.3.4:8080/manager/
    ProxyPass /saas01/a4j/ http://1.2.3.4:8080/myapp/a4j/
    ProxyPass /saas01/ http://1.2.3.4:8080/myapp/
    ProxyPass /myapp/ http://1.2.3.4:8080/myapp/
    ProxyPass /express/ http://1.2.3.4:8080/express/
    ProxyPassReverse /saas01/a4j/ http://1.2.3.4:8080/myapp/a4j/

    ProxyPassReverse /saas01/a4j/ http://1.2.3.4:8080/myapp/a4j/
    ProxyPassReverse /saas01/ http://1.2.3.4:8080/myapp/
    ProxyPassReverse /myapp/ http://1.2.3.4:8080/myapp/
    ProxyPassReverse /express/ http://1.2.3.4:8080/express/
    ProxyHTMLURLMap http://1.2.3.4:8080/myapp/a4j/ /saas01/a4j/
    ProxyHTMLURLMap http://1.2.3.4:8080/myapp/ /saas01/
    ProxyHTMLURLMap http://1.2.3.4:8080/express/ /express/

#peticiones AJAX
<Location /saas01/a4j/>
    ProxyPassReverse http://1.2.3.4:8080/saas01/a4j/
    ProxyHTMLURLMap /saas01/a4j/ /saas01/
</Location>
<Location /saas01/>
    ProxyPassReverse /myapp/
    ProxyHTMLURLMap /myapp/ /saas01/
</Location>
<Location /myapp/a4j/>
    ProxyPassReverse http://1.2.3.4:8080/saas01/a4j/
    ProxyHTMLURLMap /saas01/a4j/ /saas01/a4j/
</Location>
<Location /myapp/>
    ProxyPassReverse http://1.2.3.4:8080/saas01/a4j/
    ProxyHTMLURLMap /myapp/a4j/ /saas01/a4j/
</Location>
<Location /express/>
    ProxyPassReverse http://1.2.3.4:8080/express/
    ProxyHTMLURLMap /express/ /express/
</Location>
</IfModule>