NAMP: Nginx como Proxy Reverso Cacheador, PHP-FPM y Apache.

En la entrada de hoy voy a explicar cómo desplegar el entorno bautizado como “NAMP” por mi compañero Ismael Ramos.

Este entorno consiste en un servidor Web Nginx que escuchará las peticiones Web en el puerto 80 y cacheará y redirigirá las mismas a un servidor Web Apache, que estará ejecutando el PHP con PHP-FPM 7.2.

Este entorno da un rendimiento y seguridad espectaculares y a mi opinión es el tipo de plataforma que se debería montar hoy en día en servidores web sin balanceo (un único frontal).

Primeros pasos:

 

Partimos de la base de que el entorno se va a desplegar en un servidor CentOS 7, el ejemplo es extensible a Debian/Ubuntu pero tendréis que adecuar los paquetes que se instalan entre otras cosas.

Primeramente, instalaremos Apache junto a sus módulos principales:

Seguidamente, como vamos a usar PHP 7.2, instalaremos la misma, para ello, instalamos el repo de remi, instalamos las yum utils, habilitamos el repo de php72 de remi y procedemos a instalar los paquetes de PHP 7.2. ¡Especial importancia a instalar PHP-FPM!

Por último, nos quedaría instalar nginx:

Preparación del entorno:

 

Bien, ahora que tenemos todo instalado, lo primero es preparar el entorno en el que vamos a desplegar nuestra plataforma “NAMP”. Esto incluye crear los usuarios y sus directorios y ajustar permisos de los mismos. Como estamos haciendo un ejemplo, vamos a suponer la creación de la web prueba.midominio.com con el usuario prueba.

Por último, quedaría editar el fichero passwd para cambiar el home del usuario prueba al de la ruta /var/www/vhost/prueba.midominio.com.

La línea debería quedar más o menos así:

Configuración de PHP-FPM:

 

Ahora procederemos a configurar PHP-FPM. Tras instalar PHP-FPM, se nos ha generado una ruta en /etc/php-fpm.d/ dentro de la cual tenemos un pool por defecto llamado www.conf.

Lo primero que vamos a hacer es mover el pool por defecto a .back y generaremos el nuestro propio:

Seguidamente, generamos nuestro pool:

Con el contenido:

Fijaros en que indicamos un nombre para el pool entre los corchetes. Con las variable user y group indicamos que usuario y grupo ejecutarán el pool y el PHP, después, con listen, indicamos donde se ubicará el socket de FPM.

Configuración de Apache:

 

Bien, ahora pasamos a configurar Apache. Lo primero de todo, como vamos a utilizar PHP-FPM como handler del PHP, no podemos utilizar Prefork como MPM de Apache, por lo que tendremos que cambiar el MPM a Event.

Para ello, editamos el fichero /etc/httpd/conf.modules.d/00-mpm.conf y comentamos la línea de prefork y descomentamos la de event,  el fichero debe quedar con un contenido similar a este:

Seguidamente, vamos a cambiar los puertos de escuchar de Apache a los puertos 7080 y 7081, pues Nginx será quien escuche en el puerto 80 y 443.

Para ello, editamos el fichero /etc/httpd/conf/httpd.conf y cambiamos las líneas “Listen” por las siguientes:

Ahora, vamos a crear nuestro virtualhost de prueba.midominio.com.  Para ello, creamos el fichero /etc/httpd/conf.d/prueba_vhost.conf con el siguiente contenido:

 

Configuración de NGINX:

 

El siguiente paso es configurar Nginx para que escuche las peticiones web de nuestro dominio prueba.midominio.com y las pase a Apache.

Para ello, primero de todo, editaremos el fichero /etc/nginx/nginx.conf y comentaremos el virtualhost que Nginx genera por defecto, es aquel que está contenido dentro de las variables Server {}. Deberíamos dejar el fichero comentado similar a esto:

Ahora, vamos a crear, como hicimos en Apache, un virtualhost en Nginx para el dominio. Para ello, creamos el fichero  /etc/nginx/conf.d/prueba.conf y añadimos:

Ahora solo nos queda generar el directorio donde se va a depositar la caché:

Y ahora vamos a activar la comprensión GZIP mediante Nginx, para ello, generamos un fichero de configuración:

Y añadimos:

 

Ajuste final:

 

Ahora mismo nuestro entorno funcionaría, pero nos queda un último paso y es instalar el módulo mod_rpaf para Apache, que nos permitirá realizar un forward de las IPs desde Nginx, en otras palabras, en los logs de Apache y el server status observaremos la IP real del visitante en lugar de la IP del propio servidor (pues nginx pasa la petición a Apache).
Para ello, habilitamos el repo del módulo:

Con el siguiente contenido:

Instalamos el módulo desde dicho repo:

Y ahora editamos el fichero de configuración del módulo para habilitarlo:

 

Ahora si, paso final.

 

¿Que nos queda? Comprobar nuestra sintaxis y reiniciar servicios.

Comprobad mediante Apachectl -S y Nginx -T que vuestra sintaxis es correcta y no hayáis cometido fallos.

Si todo está bien, proceded con el reinicio de servicios:

Y mediante un cURL podremos comprobar que nuestra caché está activa (Nota, el primer cURL no cacheará, lanzad el mismo dos veces pues cuando se genere la segunda petición ya si habrá generado la caché):

Como podéis ver, la caché está activa por la cabecera X-Cache-Status: HIT

 

¡Espero que os sirva!

 

Deja un comentario

Your email address will not be published.