Get it on Google Play

Configurando un balanceador para Liferay con Nginx+Seguridad TLS+Docker

04-07-2016
 
Nginx-Liferay Balancer

Nginx-Liferay Balancer

Nginx es un servidor proxy que nos permite hacer de proxy para Http, mail, TCP/UDP generico, etc. o usarlo como balanceador de carga, servir contenido estático, cifrado TLS, etc. Es mucho mas ligero y rápido que Apache, y este es el motivo por el que lo vamos a usar para crear un balanceador de carga para Liferay.

Para hacerlo todo un poco mas fácil y ligero 😀 instalaremos Nginx como contenedor Docker. Es decir, que debemos tener instalado Docker en el servidor.

Primero nos crearemos una carpeta que se llamará ‘/opt/nginx’. En esta carpeta crearemos el fichero ‘default.com’, donde irá la configuración de Nginx:

# Configuramos el Balanceador
upstream balanceadorliferay  {
	# Usamos la directiva ip_hash para indicarle que todas las peticiones de la misma IP vaian al mismo servidor(Para mantener las sesiones)
	ip_hash;

	server <servidor_1>:8080;
	server <servidor_2>:8080;

	}

# Configuramos el HTTP no seguro para que redirija todas las peticiones a HTTPS
server {
	listen 80 default_server;

	return 301 https://$host$request_uri;
	}

# Configuramos HTTPS
server {
	listen 443 ssl;
	server_name midominio.com;
	ssl_certificate     /etc/nginx/certs/midominio.com.crt;
    	ssl_certificate_key /etc/nginx/certs/midominio.com.key;
    	ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    	ssl_ciphers         HIGH:!aNULL:!MD5;

	location / {
		proxy_pass  http://balanceadorliferay;
		proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
		proxy_redirect off;
		proxy_buffering off;
		proxy_set_header        Host            $host;
		proxy_set_header        X-Real-IP       $remote_addr;
		proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
		}
	}

En esta misma carpeta debemos crear otra carpeta llamada ‘certs’ donde deberemos de tener los certificados de seguridad ‘midominio.com.crt’ y ‘/etc/nginx/certs/midominio.com.key’.

Una vez hecho esto ya podemos arrancar nuestro contenedor Nginx(Usaremos la versión de la imagen alpine):

docker run --restart=always \
	-p 80:80 \
	-p 443:443 \
	--name nginx \
	-v /opt/nginx/certs:/etc/nginx/certs:ro \
	-v /opt/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro \
	 -d nginx:alpine

La configuración es muy sencilla, se mapean los puertos 80 y 443 y se mapean un par de volumenes(carpetas).

Finalmente, para que Liferay no nos de problemas deberemos añadir las siguientes propiedades a nuestro fichero ‘portal-ext.properties’. Básicamente son para que cuando genere las URL y sirva el contenido lo haga siempre por el puerto 443:

web.server.https.port=443
web.server.protocol=https

Los que estéis acostumbrados a configurar el balanceador de Apache comprobareis que Nginx es mucho mas rápido. Además, si lo instalamos como contenedor Docker la instalación se simplifica al máximo.

Que pasa con AJP?

Para los que hayáis encontrado a faltar la configuración del protocolo AJP, Nginx no da soporte ahora mismo para este protocolo(Aunque hay algún proyecto por allí para dárselo). Por este motivo he optado por no configurar el protocolo AJP y quedarme con el HTTP.

Interesado en formación Liferay?

 

Leave a Reply

© Albert Coronado Calzada