En la búsqueda de la velocidad y la eficacia, nuestro equipo de ingenieros está constantemente innovando y perfeccionando nuestra pila tecnológica. Un objetivo clave de estas mejoras es acelerar los procesos generales dentro de nuestra plataforma.
En línea con este compromiso, hemos integrado PHP-FPM en todos nuestros servidores como parte de nuestros esfuerzos continuos por aumentar el rendimiento e implementar mejoras continuas. Esta integración supone un importante paso adelante para las aplicaciones alojadas en servidores Cloudways.
Ahora, se espera que estas aplicaciones ofrezcan un rendimiento hasta 3 veces más rápido. Este artículo proporcionará una visión detallada de cómo esta integración mejora el rendimiento de PHP-FPM y optimiza tus aplicaciones web.
¿Qué es PHP-FPM y por qué usarlo?
PHP-FPM (FastCGI Process Manager) es una implementación alternativa de PHP FastCGI con algunas características adicionales útiles para sitios de cualquier tamaño, especialmente los más concurridos. Es un método eficaz para procesar contenido dinámico en tu sitio web, proporcionando un aumento significativo de la velocidad.
Para ello, mantiene pools (trabajadores listos para servir código PHP). Estos procesos PHP persistentes pueden servir consultas instantáneamente sin ningún retraso en la inicialización del proceso PHP. Esto acelera tu entorno PHP y, eventualmente, tus aplicaciones web.
Características principales de PHP-FPM
Veamos las características que hacen de PHP-FPM una potente herramienta para gestionar sitios web con mucho tráfico.
- Gestiona las tareas iniciándolas y concluyéndolas de forma autónoma.
- Se adapta a varias configuraciones de trabajo, como puertos, patrones de registro y carga de archivos.
- Utiliza los archivos de configuración existentes para completar las peticiones y vaciar los datos.
- Gestiona datos de bases de datos y sitios web de gran tráfico.
- Mejora las medidas de seguridad y evita la sobrecarga del servidor.
- Ofrece una gran capacidad de configuración con distintos ajustes de uid/gid/chroot/entorno y php.ini.
- Proporciona varias opciones para ajustar el rendimiento.
Rendimiento de PHP-FPM frente a mod_PHP
mod_PHP es un módulo para el servidor web Apache que permite ejecutar PHP como parte del conjunto básico de Apache. Esto significa que cuando un usuario solicita una página PHP, Apache incluye mod_PHP, que interpreta y procesa el código PHP.
Aunque tanto PHP-FPM como mod_PHP tienen sus ventajas, PHP-FPM es generalmente más rápido y flexible. No tiene que iniciar un proceso individual para cada petición como hace mod_PHP, lo que lo hace más eficiente para servir peticiones concurrentes.
Hemos probado un sitio WordPress en el servidor de 4 GB de DigitalOcean utilizando tanto PHP-FPM como mod_PHP. No utilizamos Varnish ni Turpentine para la prueba. Cada vez, notamos un mayor rendimiento y estabilidad con la pila que contenía PHP-FPM.
Rendimiento con mod_PHP
La prueba generó 38.046 accesos con éxito en 295,0 segundos, con una transferencia de datos de 7.399,11 KB de entrada y 206.219,42 KB de salida de la aplicación. La tasa media de aciertos de 128,0/segundo se traduce en unos 1.1059.200 aciertos/día.
El tiempo medio de respuesta fue de 2150 ms.

Rendimiento con PHP-FPM
Lo único diferente en esta prueba es la adición de PHP-FPM.
La prueba generó 85.829 accesos con éxito en 295,0 segundos, con una transferencia de 16.465,18 KB de datos de entrada y 465.728,74 KB de datos de salida de la aplicación. La tasa media de aciertos de 290,0/segundo se traduce en unos 25.056.000 aciertos/día.
El tiempo medio de respuesta fue de 628 ms.

La prueba generó 85.829 aciertos en 295,0 segundos con una transferencia de 16,465.18 KB de entrada y 465.728,74 KB de salida de datos de la aplicación. La tasa media de visitas de 290,0/segundo se traduce en unas 25.056.000 visitas/día.
El tiempo medio de respuesta fue de 628 ms.
Puede que también te guste: PHP 5.6 Vs PHP 7 – Benchmarks de Rendimiento con Symfony 3
Resultados de los indicadores de rendimiento
Puedes observar que PHP-FPM hizo que nuestro sitio web de prueba fuera casi un 350% más rápido en cuanto a tiempos de carga. Además, hizo que el sitio consumiera el doble de recursos que con mod_php.
PHP-FPM, una de las formas más novedosas de utilizar PHP junto con un servidor web, es una implementación alternativa de PHP FastCGI. Este módulo de PHP puede utilizarse con cualquier servidor web que sea compatible con el protocolo de FastCGI.
La principal ventaja de PHP-FPM es su sistema de gestión de pools. Cada pool de PHP-FPM es como una instancia de PHP independiente con sus propios ajustes, límites y reglas. Esto incluye cosas como procesos hijo, módulos, variables de entorno, directorios y registros.
¿Cuándo usar PHP-FPM o mod_PHP?
Para sitios web de alto tráfico que sirven a muchos usuarios simultáneos, PHP-FPM es probablemente la mejor opción. Está diseñado para cargas pesadas y utiliza un sistema de gestión de grupos para manejar múltiples instancias de PHP, garantizando un rendimiento óptimo.
Sin embargo, para sitios web más pequeños con menos tráfico y recursos, como los de un entorno de alojamiento compartido, mod_PHP podría ser suficiente. Es un gestor de PHP más antiguo que se ejecuta como un módulo de Apache, y es más sencillo de usar y adecuado para sitios más pequeños.
Potencia tus aplicaciones web con PHP-FPM en Cloudways
Cámbiate a Cloudways hoy mismo e impulsa tus aplicaciones web con mayor velocidad, seguridad y personalización.
Activar PHP-FPM manualmente en Docker
Vamos a activar PHP-FPM en Docker para mejorar el rendimiento y el manejo eficiente de tus aplicaciones PHP.
Paso 1: Crear una aplicación PHP
Crea una sencilla aplicación PHP hola mundo creando un archivo llamado hola.php.
<html> </html>
Paso 2: Crear un archivo Dockerfile
Crea un Dockerfile utilizando la variante FPM de PHP (php:7.2-fpm en este caso) y copia tu código fuente PHP en un directorio de la imagen Docker.
# docker build . -t mi-php-app:1.0.0 DESDE php:8.2-fpm EJECUTAR mkdir /app COPIA hola.php /app
Paso 3: Configurar Configmap
En Kubernetes, ejecutaremos dos contenedores en un pod: uno para PHP-FPM para gestionar el procesamiento PHP, y otro para Nginx como servidor web, ambos accediendo a un volumen compartido.
Configuraremos el contenedor Nginx y le indicaremos que envíe cualquier petición de archivos *.php a nuestra aplicación PHP-FPM a través de localhost:9000.
# En primer lugar, crea un ConfigMap cuyo contenido se utilice
# como el archivo nginx.conf en el servidor web.
# Este servidor utiliza /var/www/html como su
# directorio raíz del documento. Cuando el servidor recibe un
# solicitud de *.php, reenviará esa solicitud
# a nuestro contenedor PHP-FPM.
tipo: ConfigMap
apiVersion: v1
metadatos:
nombre: nginx-config
datos:
nginx.conf: |
acontecimientos {
}
http {
servidor {
listen 80 default_server;
listen [::]:80 default_server;
# Configura nginx para que sirva archivos del volumen compartido.
root /var/www/html;
nombre_servidor _;
ubicación / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
incluye fastcgi_params;
fastcgi_param REQUEST_METHOD $método_de_petición;
fastcgi_param SCRIPT_FILENAME $document_root$nombre_del_script_fastcgi;
fastcgi_pass 127.0.0.1:9000;
}
}
}
Paso 4: Crear el Pod de Kubernetes
Crea un pod Kubernetes para ejecutar tu contenedor de aplicaciones y el sidecar del servidor web Nginx, y asegúrate de revisar los comentarios en el gist.
# Crea un pod que contenga la aplicación PHP-FPM (my-php-app)
# y nginx, cada uno montando el volumen `shared-files` en su
# respectivos directorios /var/www/html.
tipo: Vaina
apiVersion: v1
metadatos:
nombre: phpfpm-nginx-ejemplo
espec:
volúmenes:
# Crea el volumen de archivos compartidos que se utilizará en ambos pods
- nombre: archivos compartidos
emptyDir: {}
# Añade el ConfigMap que declaramos antes como volumen para el pod
- nombre: nginx-config-volume
configMapa:
nombre: nginx-config
contenedores:
# Nuestra aplicación PHP-FPM
- imagen: mi-php-app:1.0.0
nombre: app
volumenMonta:
- nombre: archivos compartidos
mountPath: /var/www/html
# ¡Importante! Una vez iniciado este contenedor, los archivos PHP
# de nuestra imagen Docker no están en el volumen compartido. Necesitamos
# introducirlos en el volumen compartido. Si intentáramos escribir directamente
# a este volumen desde nuestra imagen Docker los archivos no aparecerían
# en el contenedor nginx.
#
# Entonces, después de que el contenedor se haya iniciado, copia los archivos PHP de este
# sistema de archivos local del contenedor (/app -- añadido a través de la imagen Docker)
# al volumen compartido, que está montado en /var/www/html.
ciclo de vida:
postInicio:
exec:
comando: ["/bin/sh", "-c", "cp -r /app/. /var/www/html"].
# Nuestro contenedor nginx, que utiliza la configuración declarada anteriormente,
# junto con los archivos compartidos con la aplicación PHP-FPM.
- imagen: nginx:1.7.9
nombre: nginx
volumenMonta:
- nombre: archivos compartidos
mountPath: /var/www/html
- nombre: nginx-config-volume
mountPath: /etc/nginx/nginx.conf
subRuta: nginx.conf
Cambiar la configuración de PHP-FPM en Cloudways
Para servidores lanzados después del 23 de agosto de 2016, en la Plataforma Cloudways, PHP-FPM está activado por defecto, y mod_PHP está retirado. Para servidores más antiguos, PHP-FPM puede activarse siguiendo esta guía.
Paso 1: Ve a Configuración de la aplicación
- Accede a tu cuenta Cloudways;
- En la barra de menú superior, abre Servidores;
- Selecciona el servidor donde está instalada tu aplicación.

- Pulsa el icono del globo terráqueo.
- Elige tu aplicación.

- En Gestión de aplicaciones, selecciona Configuración de la aplicación.
- Navega hasta Configuración PHP FPM.

Paso 2: Configurar los ajustes de PHP-FPM
Por favor, utiliza este editor con cuidado e introduce los valores en el formato adecuado. Puedes arriesgarte a romper tu(s) aplicación(es) con una configuración incorrecta.
Las directivas permitidas son php_flag, php_admin_flag, php_value y php_admin_value. Asegúrate de que no hay punto y coma (;) antes de las reglas que has añadido, o de lo contrario actuará como un comentario.
- php_flag se utiliza para establecer valores booleanos para las opciones. Los valores permitidos para las directivas son On u Off. Por ejemplo, php_flag[log_errors] = on
- php_value se utiliza para todo lo demás que no sean los parámetros booleanos (Activado y Desactivado). Por ejemplo: php_value[error_log] /some/dir/to/log/php_errors.log
- Utiliza php_admin_flag y php_admin_value si no deseas utilizar php.ini, .htaccess o la llamada de PHP ‘ini_set’ (en el código) para anular la configuración de PHP.

Ejemplos de directivas PHP comunes
Puedes utilizar estas directivas PHP para controlar diferentes aspectos de la ejecución de un script PHP.
Editar el tamaño máximo de la entrada
En PHP, la directiva post_max_size controla el tamaño máximo de los datos POST que se pueden enviar a un script PHP. Puedes editar esta directiva en tu archivo de configuración de PHP(normalmente php.ini) para aumentar o reducir el tamaño máximo permitido.
Aumenta el post_max_size a 100MB:
post_tamaño_max = 100M
Aumenta el post_max_size a 1GB:
post_tamaño_max = 1G
Recuerda ajustar esta configuración según las capacidades y requisitos de tu servidor, ya que los valores extremadamente grandes pueden provocar un uso excesivo de memoria y posibles riesgos de seguridad.
Ajusta el tiempo máximo de entrada
En PHP, la directiva max_input_time determina el tiempo máximo en segundos que el script PHP puede procesar los datos de entrada.
Si el tiempo de ejecución del script supera este límite, PHP terminará el script. Puedes editar la directiva max_input_time en tu archivo de configuración de PHP (normalmente php.ini) para establecer el valor deseado.
Establece el tiempo_de_entrada_máximo en 60 segundos:
tiempo_máx_entrada = 60
Establecer el tiempo máximo de ejecución
El tiempo máximo que un script PHP puede tardar en procesar los datos (independientemente del tamaño) se puede cambiar fácilmente. En el siguiente ejemplo, este tiempo se ha fijado en 120 segundos:
php_admin_valor[max_execution_time] = 120
Establecer el límite de memoria
El tamaño máximo de memoria que puede asignar un script PHP se puede establecer fácilmente. En el siguiente ejemplo, el tamaño máximo de memoria se establece en 96 MB:
php_admin_valor[memory_limit] = 96M
Resumen
Elegir entre PHP-FPM y mod_PHP puede afectar mucho al rendimiento de tu aplicación web. Nuestras pruebas demuestran que PHP-FPM destaca en velocidad y eficiencia de recursos. Por lo tanto, tomar una decisión informada puede mejorar significativamente tu rendimiento general.
Para facilitarlo, hemos simplificado el proceso de ajuste de la configuración de PHP-FPM a través de Cloudways. Esto permite ajustar fácilmente el rendimiento de tu aplicación. Además, hemos proporcionado ejemplos de directivas PHP como medio adicional para optimizar tu configuración PHP.
P: ¿Para qué se utiliza PHP-FPM?
R: PHP-FPM (FastCGI Process Manager) es una herramienta web utilizada para acelerar el rendimiento de un sitio web. Es mucho más rápido que los métodos tradicionales basados en CGI y tiene la capacidad de manejar enormes cargas simultáneamente.
P: ¿Cómo resolver el error «El servicio PHP-FPM no se está ejecutando»?
R: Para resolver este error, simplemente cambia el archivo de configuración por /var/run/php5-fpm.pid en lugar de /var/run/php-fpm.pid. Esto podría resolver el error mencionado en cuestión de minutos.
Start Growing with Cloudways Today.
Our Clients Love us because we never compromise on these
Inshal Ali
Inshal es Content Marketer en Cloudways. Con formación en informática, habilidad para los contenidos y mucha creatividad, ayuda a las empresas a alcanzar el cielo e ir más allá a través de contenidos que hablan el idioma de sus clientes. Aparte del trabajo, le verás sobre todo en algún juego en línea o en un campo de fútbol.