Tutorial

Cómo configurar el servidor HTTP Apache con MPM Event y PHP-FPM en Ubuntu 18.04

ApacheLAMP StackUbuntu 18.04

El autor seleccionó el COVID-19 Relief Fund para que reciba una donación como parte del programa Write for DOnations.

Introducción

El servidor web HTTP Apache ha evolucionado a través de los años para trabajar en entornos diversos y satisfacer diferentes necesidades. Un problema importante, que HTTP Apache tiene que resolver, al igual que cualquier servidor web, es cómo administrar los diferentes procesos para presentar una solicitud de protocolo http. Esto implica abrir un socket, procesar la solicitud, mantener la conexión abierta durante un período determinado, administrar los nuevos eventos que se producen a través de esa conexión y devolver el contenido producido por un programa escrito en un lenguaje específico (como PHP, Perl o Python). Estas tareas se realizan y se controlan con un módulo de procesamiento múltiple (MPM).

HTTP Apache viene con tres MPM diferentes:

  • Pre-fork: se crea un nuevo proceso para cada conexión entrante que llega al servidor. Cada proceso se separa de los demás, por lo que no comparten memoria entre ellos, incluso si están realizando llamadas idénticas en algún momento de su ejecución. Esta es una forma segura para ejecutar aplicaciones vinculadas a bibliotecas que no son compatibles con la ejecución de subprocesos; generalmente, aplicaciones o bibliotecas más antiguas.
  • Worker: un proceso primario se encarga de iniciar un conjunto de procesos secundarios, algunos de los cuales están atentos a nuevas conexiones entrantes y otros presentan el contenido solicitado. Cada proceso está encadenado (un solo hilo puede gestionar una conexión), de modo que un proceso puede gestionar varias solicitudes al mismo tiempo. Este método para manipular las conexiones fomenta una mejor utilización de los recursos, y, a la vez, mantiene la estabilidad. Esta es una consecuencia del conjunto de procesos disponibles, que a menudo tiene hilos disponibles listos para presentar nuevas conexiones.
  • Event: tomando a worker como base, este MPM va más allá al optimizar la forma en que el proceso primario programa las tareas de los procesos secundarios y los hilos asociados a ellos. Por defecto, una conexión se mantiene abierta durante 5 segundos y se cierra si no sucede ningún evento; este es el valor predeterminado de la directiva keep-alive, que conserva el hilo asociado a ella. Event MPM habilita el proceso para la administración de hilos de manera que algunos queden libres para administrar las nuevas conexiones entrantes y, a la vez, otros se mantengan vinculados a las conexiones en vivo. Al permitir la redistribución de las tareas asignadas a los hilos, se logrará una mejor utilización y un mayor rendimiento de los recursos.

MPM Event es un módulo de procesamiento múltiple rápido disponible en el servidor web HTTP Apache.

PHP-FPM es el administrador de procesos FastCGI para PHP. El protocolo FastCGI se basa en la Interfaz de Acceso Común (CGI), un protocolo que se encuentra entre las aplicaciones y los servidores web, como HTTP Apache. Permite a los programadores desarrollar aplicaciones de forma separada del comportamiento de los servidores web. Los programas ejecutan los procesos de manera independiente y pasan su producto al servidor web a través de este protocolo. Cada vez que una aplicación necesite procesar una nueva conexión, se creará un nuevo proceso.

Combinar el módulo MPM Event en HTTP Apache con el administrador de proceso de FastCGI para PHP (PHP-FPM) le permite a un sitio web cargar más rápido y administrar más conexiones simultáneas, mientras utiliza menos recursos.

En este tutorial, cambiará el módulo de procesamiento múltiple predeterminado de pre-fork a event y utilizará el administrador de procesos PHP-FPM para gestionar el código PHP en lugar del clásico mod_php en HTTP Apache, con el propósito de mejorar el rendimiento de la pila LAMP.

Requisitos previos

Para completar esta guía, necesitará lo siguiente:

Paso 1: Cambiar el módulo de procesamiento múltiple

Ubuntu hereda la secuencia de comandos para habilitar o deshabilitar los módulos de HTTP Apache de su distribución principal, Debian. En este paso, utilizará este conjunto de herramientas para deshabilitar el módulo Pre-fork y habilitar el módulo Event.

También, detendrá HTTP Apache, deshabilitará el módulo PHP 7.2, vinculado al módulo Pre-fork, y, luego, deshabilitará Pre-fork para habilitar de inmediato el módulo Event.

Primero, detendrá el servicio de HTTP Apache:

  • sudo systemctl stop apache2

Ahora, puede deshabilitar el módulo PHP 7.2, que está enlazado al módulo Pre-fork:

  • sudo a2dismod php7.2

Luego, deshabilite el módulo Pre-fork MPM:

  • sudo a2dismod mpm_prefork

Ahora, habilite el módulo Event MPM:

  • sudo a2enmod mpm_event

Cambió el MPM de pre-fork a event y eliminó la conexión del módulo PHP 7.2 ubicado entre PHP y HTTP Apache. En el siguiente paso, instalará el módulo php-fpm, así como los módulos de las bibliotecas y del proxy relacionados. Configurará HTTP Apache para que también pueda comunicarse con PHP.

Paso 2: Configurar HTTP Apache para utilizar el administrador de procesos de FastCGI

En esta etapa, cambió el MPM de Pre-fork a Event a fin de modificar la manera en que HTTP Apache procesa las conexiones. Sin embargo, durante ese proceso deshabilitó el módulo de PHP que conectaba HTTP Apache con cualquier programa que se ejecute en PHP.

En este paso, instalará el procesador de PHP-FPM para que HTTP Apache pueda procesar los programas en PHP nuevamente. También instalará las bibliotecas de dependencias y habilitará los módulos para que ambos puedan cooperar de una manera fluida y más rápida que antes.

Primero, instale php-fpm. El siguiente comando instalará el paquete PHP-FPM y habilitará automáticamente el servicio php7.2-fpm, que está integrado con systemd, de modo que el servicio comience en el momento del inicio:

  • sudo apt install php-fpm

Para poder comunicarse, HTTP Apache y PHP necesitan una biblioteca que habilite esa capacidad. Ahora, instalará libapache2-mod-fcgid, que puede servir como una interfaz entre los programas con servidores web, y es específica para HTTP Apache. Esta comunicación se realizará a través de un socket UNIX.

Instale esta biblioteca:

  • sudo apt install libapache2-mod-fcgid

Instaló php-fpm y libappache2-mod-fcgid, pero ninguno está habilitado aún.

Primero, habilite el módulo php-fpm con el siguiente comando:

  • sudo a2enconf php7.2-fpm

Segundo, habilite el módulo del proxy de HTTP Apache:

  • sudo a2enmod proxy

Tercero, habilite el módulo del proxy de FastCGI en HTTP Apache:

  • sudo a2enmod proxy_fcgi

Nota: con la siguiente línea puede leer la configuración de la interacción entre los programas en PHP y HTTP Apache a través de un socket UNIX:

  • cat /etc/apache2/conf-enabled/php7.2-fpm.conf

Ahora, todo está listo para iniciar HTTP Apache. Primero, realizará una comprobación de configuración:

  • sudo apachectl configtest
Output
Syntax OK

Después de eso, puede proceder a reiniciar HTTP Apache, ya que se inició automáticamente al instalar la biblioteca de FastCGI, libapache2-mod-fcgid:

  • sudo systemctl restart apache2

Instaló el módulo php-fpm, configuró HTTP Apache para trabajar con él, habilitó los módulos necesarios para que el protocolo CGI funcione e inició los servicios correspondientes.

Ahora que Apache tiene el módulo Event MPM habilitado y PHP-FPM está activo y ejecutándose, es momento de verificar que todo funcione según lo previsto.

Paso 3: Comprobar su configuración

Ejecutará algunas pruebas para verificar que los cambios de configuración se hayan aplicado. La primera prueba comprobará qué módulo de procesamiento múltiple está utilizando HTTP Apache. La segunda verificará que PHP esté utilizando el administrador de FPM.

Ejecute el siguiente comando para comprobar el servidor HTTP Apache:

  • sudo apachectl -M | grep 'mpm'

El resultado será el siguiente:

Output
mpm_event_module (shared)

Puede repetir el mismo proceso para el módulo proxy y FastCGI:

  • sudo apachectl -M | grep 'proxy'

El resultado mostrará lo siguiente:

Output
proxy_module (shared) proxy_fcgi_module (shared)

Si quiere ver la lista completa de los módulos, puede eliminar la segunda parte del comando, después de -M.

Ahora, es momento de verificar si PHP está utilizando el administrador de procesos de FastCGI. Para ello, escribirá una pequeña secuencia de comandos PHP que le mostrará toda la información relacionada con PHP.

Ejecute el siguiente comando para escribir un archivo con el siguiente nombre:

  • sudo nano /var/www/your_domain/info.php

Añada el siguiente contenido al archivo info.php:

info.php
<?php phpinfo(); ?>

Ahora, visite la URL de su servidor y anexe info.php al final como se muestra: http://your_domain/info.php.

La entrada de la API del servidor será FPM/FastCGI.

Entrada de la API del servidor FPM/FastCGI en la pantalla de PHP

Elimine el archivo info.php después de esta comprobación, de modo que no se divulgue públicamente información sobre el servidor:

  • sudo rm /var/www/yourdomain.com/info.php

Verificó el estado de funcionamiento del módulo MPM, los módulos que administran el FastCGI y la utilización del código PHP.

Conclusión

Optimizó su pila LAMP original, de modo que se aumentó el número de conexiones para crear nuevos procesos de HTTP Apache, PHP-FPM administrará el código PHP de manera más eficiente y mejoró la utilización general de los recursos.

Consulte la documentación del proyecto del servidor HTTP Apache para obtener más información sobre los diferentes módulos y los proyectos relacionados.

0 Comments

Creative Commons License