PHP7.2, nginx, PHP-FPM en CentOS7

Pese a que soy usuario habitual del sistema del pingüino, suelo decantarme por la familia basada en Debian. Es cuando hago experimentos cuando, para complicarme más las cosas, decido hacerlo en sistemas en los que no me conozco sus entresijos. Este es el motivo por el que elegí hacer esta instalación en CentOS7.

Ya hace tiempo que había oído acerca de las virtudes de nginx como servidor web para contenido estático. Sin embargo parecía que para procesar php no iba muy fino y se acababa combinando con Apache http server que se encargaba de este tema.

Pero entonces, me di cuenta de la existencia de php-fpm y de la forma en la que puede trabajar con nginx.

En resumen, php-fpm trabaja de forma independiente a nginx. Nginx le pasa el trabajo, y recoje el resultado, tal y como haría al utilizar un servidor Apache pero, quitándose al intermediario.

Finalmente, tras asistir a una charla sobre hostings web, con un poco de tiempo libre y mucha curiosidad, me decidí a probar. Ya puestos, tiramos de las últimas versiones de nginx y de php.

Instalación de nginx en CentOS 7 mediante repositorio de nginx.org

Parto del manual de instalación disponible en la web oficial. Lo cierto es que viene todo bastante conciso y bien explicado.

Agrego el repositorio en /etc/yum.repo.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/x86_64/
gpgcheck=0
enabled=1

[code lang=bash]
yum install nginx
[/code]

[code lang=bash]
systemctl start nginx
[/code]

Compilación e instalación de php7.2 con soporte para php-fpm y mysql

Descargo las fuentes desde php.net:

[code lang=bash]
curl -o php-7.2.0.tar.xz «http://es1.php.net/distributions/php-7.2.0.tar.xz»
[/code]

Descomprimo el fichero en el directorio actual.

[code lang=bash]
tar -xvJf php-7.2.0.tar.xz
[/code]

Tengo que instalar gcc y libxml2-devel.

[code lang=bash]
yum install gcc.x86_64 libxml2-devel
[/code]

Entro en el directorio descomprimido y ejecuto configure con soporte para fpm y mysql.

[code lang=bash]
cd php-7.2.0
./configure –enable-fpm –with-mysql
[/code]

Si todo ha ido bien, compilo, ejecuto los test e instalo.

[code lang=bash]
make && make test
[/code]

[code lang=bash]
make install
[/code]

Configurar y probar

La documentación de instalación de php-fpm también está bastante bien aunque,  algunas rutas están cambiadas con respecto a lo que se ha creado en mi sistema tanto para nginx como para php-fpm.

Creo una página de prueba:

[code lang=bash]
echo «<?php phpinfo(); ?>» >> /usr/share/nginx/html/index.php
[/code]

[code lang=text]
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
[/code]

Debo descomentar las líneas relativas a php y cambiar la ruta de SCRIPT_FILENAME a la ruta donde tengo el index.php, por defecto /usr/share/nginx/html/:

[code lang=text]
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name;
include fastcgi_params;
}
[/code]

Definir pool www:

[code lang=bash]
cp /usr/local/etc/php-fpm/www.conf.default /usr/local/etc/php-fpm/www.conf
[/code]

Iniciar php-fpm

[code lang=bash]
/usr/local/sbin/php-fpm
[/code]

Reiniciar nginx

[code lang=bash]
systemctl restart nginx
[/code]

Permitir conexiones al puerto 80

[code lang=bash]
firewall-cmd –zone=public –add-port=80/tcp –permanent
[/code]

[code lang=bash]
firewall-cmd –reload
[/code]

Ya con esto, arranco el navegador y accediendo a http://localhost, veo que funciona.

Ahora, debería mejorarlo y poner cada cosa en su lugar recomendado.

Ya cuando estaba acabando el experimento, me encuentro con esto: https://dracony.org/stop-using-php-fpm-to-argue-using-nginx-vs-apache/… Bueno, ¡pues ya tengo otro experimento que hacer!