Ejecución de PHP con PHP-FPM
El ejercicio tendrá los siguientes pasos:
- Desinstala el módulo de apache2 que permite la ejecución de PHP.
- Instala PHP-FPM.
- Configura apache2 para que utilice PHP-FPM para ejecutar PHP, lo puedes hacer para todos los virtualhost o en cada uno de los virtualhost.
- Comprueba accediendo a un fichero info.php, que los script PHP se estan ejecutando con PHP-FPM. Comprueba que los CMS instalados siguen funcionando.
- Cambia la configuración de PHP-FPM para que escuche en el puerto tcp/9000. Cambia la configuración de apache2 para que se comunique con PHP-FPM utilizando ese puerto.
- Comprueba que las aplicaciones siguen funcionando.
- Cambia la memoria máxima de uso de un script PHP (parámetro memory_limit) a 256Mb.
Desinstala el módulo de apache2 que permite la ejecución de PHP.
Para ello podemos utilizar el siguiente comando:
apt remove libapache2-mod-php
Sin embargo, yo he optado por deshabilitar el módulo en apache, de forma que si más adelante lo necesito, pueda volver a activarlo sin problemas:
a2dismod php7.4
systemctl reload apache2
Instala PHP-FPM.
Para instalar php-fpm basta con ejecutar lo siguiente:
apt install php7.4-fpm php7.4
Podemos comprobar que tras instalarlo, está ya operativo examinando la lista de procesos activos:
Configura apache2 para que utilice PHP-FPM para ejecutar PHP, lo puedes hacer para todos los virtualhost o en cada uno de los virtualhost.
Lo primero es activar los módulos que harán que apache2 funcione como un proxy inverso, pasando todos los ficheros php
a php-fpm
para que los ejecute:
a2enmod proxy_fcgi setenvif
A continuación, modificamos los virtualhost de cada cms, añadiendo las siguientes líneas:
- En el virtualhost de mediawiki:
ProxyPassMatch ^/(.*\.php)$ unix:/run/php/php7.4-fpm.sock|fcgi://127.0.0.1/var/www/www.dparrales-mediawiki.com
- En el virtualhost de opencart:
ProxyPassMatch ^/(.*\.php)$ unix:/run/php/php7.4-fpm.sock|fcgi://127.0.0.1/var/www/opencart
Si queremos que la configuración afecte a todos los virtualhost que tenemos configurados, tenemos que asegurarnos de sustituir en el fichero /etc/apache2/conf-available/php7.4-fpm.conf
la siguiente línea:
- Si queremos usar un socket TCP, la cambiamos por la siguiente línea:
SetHandler "proxy:fcgi://127.0.0.1:9000"
- Si queremos usar un socket UNIX, la cambiamos por la siguiente línea:
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
A continuación debemos activar la configuración (solo si queremos que la configuración afecte a todos los virtualhost) y reniniar el servicio:
a2enconf php7.4-fpm
systemctl reload apache2
Comprueba accediendo a un fichero info.php, que los script PHP se estan ejecutando con PHP-FPM. Comprueba que los CMS instalados siguen funcionando.
El fichero info.php
contiene la siguiente información:
<?php
phpinfo();
?>
Vamos a colocar el fichero en los DocumentRoot de nuestros cms, para ver si se están ejecutando con php-fpm
:
Como vemos, se está ejecutando con php-fpm
. Ahora comprobemos que los cms siguen funcionando:
- Mediawiki:
- Opencart:
Cambia la configuración de PHP-FPM para que escuche en el puerto tcp/9000. Cambia la configuración de apache2 para que se comunique con PHP-FPM utilizando ese puerto.
Para ello, primero debemos cambiar el fichero de configuración de php-fpm
, ubicado en /etc/php/7.4/fpm/pool.d/www.conf
. Tenemos que comentar la línea que viene por defecto, y añadir la siguiente:
Reiniciamos el servicio tras cambiar la línea:
systemctl restart php7.4-fpm
Ahora cambiamos las líneas que añadimos antes en la configuración de los virtuahost por las siguientes:
- En mediawiki:
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/www.dparrales-mediawiki.com/$1
- En opencart:
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/opencart/$1
Reiniciamos el servicio:
systemctl reload apache2
Comprueba que las aplicaciones siguen funcionando.
Podemos comprobarlo accediendo a las respectivas urls:
- Opencart:
- Mediawiki:
Cambia la memoria máxima de uso de un script PHP (parámetro memory_limit) a 256Mb.
Para ello nos dirigimos al fichero que configura los parámetros de php al ejecutarse con php-fpm
ubicado en /etc/php/7.4/fpm/php.ini
, y modificamos la línea de memory_limit
:
Reiniciamos el servicio:
systemctl restart php7.4-fpm
Para comprobar si ha funcionado, nos vamos al fichero info.php
que creamos antes:
Como vemos, la configuración ha sido modificada correctamente.