Existen diversos motivos por los cuales queremos poner Apache al frente de Liferay, entre ellos quizás el más significativo es el hecho de que nuestro servidor debe estar en la capacidad de atender diferentes servidores web (Tomcat, JBoss, Apache + PHP, etc.) y la otra razón es que nos facilita el esquema distribuido de aplicaciones.

En este artículo aprenderemos como configurar Apache + mod_jk + VirtualHost para exponer Liferay a la web por el puerto 80.

En primer lugar el ambiente que tengo es CentOS 5.X con Apache 2 y Liferay 6.1 instalado y funcionando. Si no tiene Liferay instalado es recomendable que lea el siguiente artículo http://comunidad.fware.pro/dev/java/como-instalar-liferay-en-centos/.

Luego procedemos con la instalación del módulo mod_jk, para lo cual es importante saber si nuestro sistema es de 32 o 64 bits, si no esta seguro de esta información consulte el artículo http://comunidad.fware.pro/tech/linux/como-saber-la-version-instalada-de-centos/ que le ayudará a determinar esta información.

CentOS de 32 bits
Para esto será necesario agregar una entrada a nuestro repositorio de yum con el fin de agregar los repositorios de Jpackage. Nos ubicamos en el directorio /etc/yum.repos.d del servidor y creamos los archivos jpackage17.repo y jpackage50.repo con el siguiente contenido:

[jpackage17-generic]
name=JPackage (free), generic
mirrorlist=http://www.jpackage.org/mirrorlist.php?dist=generic&type=free&release=1.7
gpgcheck=1
gpgkey=http://www.jpackage.org/jpackage.asc
enabled=1
[jpackage17-rhel]
name=JPackage (free) for Red Hat Enterprise Linux $releasever
mirrorlist=http://www.jpackage.org/mirrorlist.php?dist=redhat-el
$releasever&type=free&release=1.7
gpgcheck=1
gpgkey=http://www.jpackage.org/jpackage.asc
enabled=1
[jpackage17-generic-nonfree]
name=JPackage (non-free), generic
mirrorlist=http://www.jpackage.org/mirrorlist.php?dist=generic&type=non-free&release=1.7
gpgcheck=1
gpgkey=http://www.jpackage.org/jpackage.asc
enabled=0
[jpackage50-generic]
name=JPackage (free), generic
mirrorlist=http://www.jpackage.org/mirrorlist.php?dist=generic&type=free&release=5.0
gpgcheck=1
gpgkey=http://www.jpackage.org/jpackage.asc
enabled=1
[jpackage50-rhel]
name=JPackage (free) for Red Hat Enterprise Linux $releasever
mirrorlist=http://www.jpackage.org/mirrorlist.php?dist=redhat-el
$releasever&type=free&release=5.0
gpgcheck=1
gpgkey=http://www.jpackage.org/jpackage.asc
enabled=1
[jpackage50-generic-nonfree]
name=JPackage (non-free), generic
mirrorlist=http://www.jpackage.org/mirrorlist.php?dist=generic&type=non-free&release=5.0
gpgcheck=1
gpgkey=http://www.jpackage.org/jpackage.asc
enabled=0

Luego de crear los archivos entonces instalamos el mod_jk usando el siguiente comando:

[root@cl-t025-423cl yum.repos.d]# yum install mod_jk-ap20

CentOS de 64 bits
Si su CentOS es de 64 bits, descargue el siguiente RPM usando el comando wget así:

[root@cl-t025-423cl ~]# wget http://comunidad.fware.pro/wp-content/uploads/2012/11/psa-mod_jk-1.2.15-6.98092.x86_64.rpm

Ahora instálelo usando el comando rpm de la siguiente forma:

[root@cl-t025-423cl ~]# rpm -ivh psa-mod_jk-1.2.15-6.98092.x86_64.rpm

Con el mod_jk instalado ahora pasaremos a la configuración del apache.

Inicialmente se debe agregar en la ruta /etc/httpd/conf.d un archivo cuyo nombre sea mod_jk.conf, así le permitirá al Apache cargar el módulo.

#
# Mod_jk settings
#
# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel emerg
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat –ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"

En este archivo se esta cargando el módulo al Apache y se le esta indicando donde encontrar el archivo worker.properties que es el más importante de la configuración.

Entonces pasamos a crear el archivo worker.properties así:

#
# This file provides minimal jk configuration properties needed to
# connect to Tomcat.
#
# The workers that jk should create and work with
#
workers.tomcat_home=/opt/liferay/tomcat-7.0.27
workers.java_home= /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
ps=/
worker.list=lray
worker.lray.port=8009
worker.lray.host=localhost
worker.lray.type=ajp13
worker.lray.lbfactor=1

En este archivo estamos definiendo la ubicación del servidor de Tomcat que para este caso esta en la ruta /opt/liferay/tomcat-7.0.27 véase el artículo http://comunidad.fware.pro/dev/java/como-instalar-liferay-en-centos/ para mayor detalle de la instalación de Liferay sobre CentOS.

Se define el home de java que para este caso es /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64

El objetivo final de este archivo es indicarle al mod_jk hacia donde dirigir las peticiones que sean recibidas por Apache.
Finalmente procedemos a configurar el VirtualHost para lo que crearemos un archivo en la ruta /etc/httpd/vhost.d llamado liferay.conf

#Liferay Virtualhost
<VirtualHost *:80>
    ServerAdmin webmaster@domain.com
    DocumentRoot /opt/liferay/tomcat-7.0.27/webapps/ROOT
    <Directory "/opt/liferay/tomcat-7.0.27/webapps/ROOT">
        Options None
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ServerName liferay.domain.com
    ErrorLog logs/ liferay.domain.com -error_log
    CustomLog logs/ liferay.domain.com -access_log common
    # Send ROOT app. to worker named lray
    JkMount  /* lray
    JkUnMount  /images/* lray
    RewriteEngine On
    RewriteRule ^/(images/.+);jsessionid=\w+$ /$1
</VirtualHost>

Téngase en cuenta que liferay.domain.com debe corresponder a una entrada en el servidor de DNS que apunte a la dirección IP por la cual escucha Apache.
Con todos los pasos anteriores realizados nos resta reiniciar el servicio de Apache así:

[root@cl-t025-423cl vhost.d]# service httpd restart

Para probarlo ingresamos en el navegador la URL liferay.domain.com.