Configurando Apache con PHP-FPM en CentOS/RHEL 7
PHP-FPM, o PHP FastCGI Process Manager, es una implementación alternativa de PHP FastCGI que puede manejar un gran volumen de consultas. Combinado con PHP 7, PHP-FPM logra un nivel de rendimiento más alto que cualquier versión anterior de PHP.
Cuando se ejecuta PHP como módulo de Apache2 (httpd), cada proceso worker es una copia del espacio de memoria del proceso maestro. Esto implica que en cada worker duplica el espacio de memoria usado para ejecutar PHP aunque no sea necesario.
Al utilizar PHP-FPM, el intérprete PHP se ejecuta como un servicio aparte, el cual puede recibir peticiones a través de un socket TCP/IP o UNIX tradicional. De esta forma se tienen dos servicios: Apache2 (httpd) para manejar el protocolo HTTP y PHP-FPM para interpretar código PHP. Esto resulta más eficiente, ya que PHP es ejecutado sólo cuando es necesario.
Ahora que conocemos un poco mas de PHP FPM es momento de instalarlo y configurarlo.
Primero debemos instalar la versión de PHP que desemos, para ello podemos ver el articulo Instalación de PHP 5.6, 7.0, 7.1 y 7.2 en CentOS/RHEL 7, en este ejemplo usaremos la versión PHP rh-php72
. También necesitaremos el servidor Apache2 (httpd).
yum install httpd mod_ssl
Una vez que tenemos todo instalado empezaremos configurando el módulo mpm de httpd en el archivo /etc/httpd/conf.modules.d/00-mpm.conf:
LoadModule mpm_event_module modulese/mod_mpm_event.so
Si queremos realizar algún cambio en el módulo PHP FPM solo tenemos que editar el archivo /etc/opt/rh/rh-php72/php-fpm.conf
.
Adicionalmente podemos realizar cambios en la configuración del pool de procesos en el archivo /etc/opt/rh/rh-php72/php-fpm.d/www.conf
.
Una vez realizados los cambios debemos reiniciar el servicio PHP FPM par aplicar los cambios.
systemctl restart rh-php72-php-fpm.service
También debemos reiniciar el servicio httpd para aplicar los cambios en el modulo mpm:
systemctl restart httpd
Finalmente debemos añadir la siguiente linea a nuestros vhosts:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
Podemos confirmar que estamos ejecutando PHP con PHP FPM con un simple phpinfo()
;