Icono del sitio Blog personal de Guido Cutipa

Cómo optimizar el rendimiento de un servidor web con Apache, PHP-FPM y MariaDB

Amigos en este post explicaré cómo instalar PHP-FPM (Fast CGI Process Manager), esto nos permitirá mejorar el rendimiento de la ejecución de nuestro código. PHP-FPM solo interpreta una vez el código PHP, después de esto se reutiliza el código almacenado en la memoria cache.

¿Qué es PHP-FPM?

FPM (FastCGI Process Manager) es una implementación alternativa al PHP FastCGI con algunas características adicionales (la mayoría) útiles para sitios web con mucho tráfico.

Sus características incluyen:

– Manejo avanzado para detener/arrancar procesos de forma fácil;
– Posibilidad de iniciar hilos de procesos con diferentes uid/gid/chroot/environment, escuchar en diferentes puertos y usar distintos php.ini (remplazando); safe_mode
– Registro stdout y stderr;
– Reinicio de emergencia en caso de destrucción accidental del caché opcode;
– Soporte acelerado de subidas;
– «slowlog» – scripts de registro de procesos (no sólo sus nombres, sin sus backtraces también, usando ptrace y similares para leer procesos execute_data remotos) que son inusualmente lentos;
– fastcgi_finish_request() – Función especial para detener y descargar todos los datos mientras continua haciendo algún proceso más largo (conversión de vídeos, procesamiento de estadísticas, etc.);
– Creación dinámico/estático de hilos;
– Información básica del status SAPI (similar al mod_status de Apache);
– Basado en archivos de configuración php.ini

http://php.net/manual/es/install.fpm.ph

Instalar MariaDB

MariaDB es un sistema de gestión de bases de datos derivado de MySQL con licencia GPL, para su instalación bastará ejecutar lo siguiente:

apt -y install mariadb-server mariadb-client

Ejecutar el siguiente comando para cambiar la configuración por defecto:

mysql_secure_installation

Instalar Apache2

Para instalar la última versión disponible de apache para Ubuntu 18.04 debemos ejecutar lo siguiente:

apt -y install apache2
apt -y install libapache2-mod-fcgid

Comandos básicos

Detener el servicio

systemctl stop apache2.service

Iniciar el servicio

systemctl start apache2.service

Reiniciar el servicio

systemctl restart apache2.service

Recargar el servicio

systemctl reload apache2.service

Seguridad en Apache2

Tomar en cuenta este post: https://guidocutipa.blog.bo/apache-2-4-hardening/

Instalar PHP-FPM

Para instalar PHP-FPM ejecutar lo siguiente:

apt -y install php php-fpm php-common

Instalar componentes adicionales adicionales

apt -y install php-gd php-json php-mysql php-intl php-imagick php-zip php-xml php-mbstring

Ajustes en el archivo de configuración php.ini

En función de la versión instalada se debe ejecutar uno de los siguientes comandos:

nano /etc/php/7.2/fpm/php.ini

o


nano /etc/php/7.4/fpm/php.ini
file_uploads = On
allow_url_fopen = On
memory_limit = 512M
upload_max_filesize = 200M
max_execution_time = 360
date.timezone = America/La_Paz

Configurar Apache para usar PHP-FPM

Habilitar algunos módulos para que Apache pueda ejecutar PHP-FPM

Para Ubuntu 18.04 y Ubuntu 20.04

a2enmod actions fcgid alias proxy_fcgi

Para Ubuntu 16.04

a2enmod actions fastcgi alias proxy_fcgi

Posteriormente ejecutar:

a2enmod proxy_fcgi setenvif

En función de la versión instalada se debe ejecutar uno de los siguientes comandos:

a2enconf php7.2-fpm

o

a2enconf php7.4-fpm

Configurando un Virtual Host

nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
 
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

  <FilesMatch \.php$>
  SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
  </FilesMatch>

</VirtualHost>

Reiniciar Apache

systemctl restart apache2.service

Prueba de la configuración

Para la verificación ejecutaremos la función phpinfo();

nano /var/www/html/info.php
<?php phpinfo( ); ?>

Una vez creado el archivo accedemos a él mediante un navegador web para obtener el siguiente resultado:

http://<IP del servidor>/info.php

Salir de la versión móvil