Instalación y configuración de Nginx + PHP-fpm en Debian

Instalación y configuración de Nginx + PHP-fpm en Debian

Leer 10 minutos

Nginx es un servidor web que fue lanzado en 2004. Este servidor es fácil de usar, pero a pesar de esto, maneja una gran cantidad de conexiones perfectamente. Esta característica se debe a su arquitectura interna. Inicialmente, fue creado como un servidor que ejecuta contenido estático (el llamado servidor de caché). A diferencia de Apache, Nginx no tiene un intérprete incorporado para manejar peticiones de contenido dinámico.

Esto requiere una interacción adicional entre el servidor web y la aplicación. El gestor de procesos PHP-FPM (FastCGI) resuelve con éxito este problema. Lo importante es que al trabajar con PHP, el aglutinante Nginx + PHP-FPM se muestra menos productivo que Apache + php_mod.

Así que si su servidor tiene requisitos de alto rendimiento para PHP, es mejor mirar el bundle apache + php_mod. Otro punto importante es que Nginx requiere más esfuerzo de configuración que Apache.

Este artículo trata de la instalación y configuración sencilla del servidor Nginx junto con el gestor de procesos PHP-FPM en Debian 8. Todas las operaciones se realizan bajo los privilegios del usuario root.

Primero, necesitas actualizar:

apt-get update

A continuación, instalamos Nginx:

apt-get -y install nginx

Después de la instalación, vamos a probar el servidor. Para ello, basta con abrir la dirección del navegador web de nuestro servidor. Se abrirá el siguiente contenido:

Esta es la página de instalación estándar de Nginx. El siguiente paso es instalar php5-fpm. Es muy sencillo:

apt-get -y install php5-fpm

A continuación, tienes que hacer la configuración. Primero, configura el servidor Nginx. El archivo de configuración está en /etc/nginx/nginx.conf.

Abre este archivo. Nosotros usamos el editor de texto vi, pero puedes usar cualquier otro que te convenga.

vi /etc/nginx/nginx.conf

Vamos a entender un poco acerca de la estructura del propio archivo. Todo el archivo es algo similar al código del programa. Tiene directivas. Se dividen en dos tipos:

  • Simple - una cadena con operadores que terminan con el símbolo ";". Por ejemplo: pid /run/nginx.pid;
  • Bloque - una directiva que contiene parámetros adicionales colocados entre llaves {}.

Otras directivas pueden colocarse dentro de llaves. En este caso, se llamará contexto, y todas las directivas que están en el archivo de configuración pero no están entre llaves están en el contexto global o el llamado contexto principal.

Las cadenas marcadas con el símbolo # son comentarios y no se consideran en la configuración.

Como se puede ver en el archivo hay una directiva

include /etc/nginx/sites-enabled/*;

Esta directiva dice que este archivo de configuración incluye todos los archivos de configuración del directorio /etc/nginx/sites-enabled/directory. Este directorio contiene esencialmente enlaces simbólicos a la configuración de hosts virtuales (esencialmente los sitios servidos en el servidor).

Ahora tenemos que configurar un host virtual que será responsable de nuestro recurso más simple (que será test.net). Primero, crearemos un directorio para él. Hagámoslo con un comando

mkdir -p /var/www/prueba.net/html

Ahora vamos a crear un archivo index.html en este directorio con el siguiente contenido:

<html> <head> <title>Hola Mundo</title> </head> <body> <h>Esta es una página de prueba.</h> </body> </html>

Ahora tenemos el contenido del sitio, vamos y una página de todo. Para este sitio, es necesario crear un host virtual. Copie el archivo por defecto para el host virtual:

cp /etc/nginx/sitios-disponibles/default /etc/nginx/sitios-disponibles/prueba.net

A continuación, ábrelo para editarlo. La directiva listen tiene opciones para default_server. Sólo se puede establecer un bloque con este valor, lo que significa que este bloque servirá consultas para las que no se encuentre nada más adecuado. Por tanto, las líneas

listen 80 default_server; listen [::]:80 default_server;

debes eliminarlas de este archivo. A continuación, hay que configurar el directorio raíz que contiene los contenidos de nuestro sitio. Para ello, escribimos la directiva raíz de la siguiente manera:

root /var/www/prueba.net/html;

La siguiente directiva index define los ficheros que se utilizarán como ficheros índice. El orden en que se comprueban los ficheros corresponde al orden en el fichero de configuración. Esta directiva se escribe de la siguiente manera

index index.html index.htm index.nginx-debian.html;

La siguiente directiva server_name especifica el nombre del servidor. Como valores, especificamos el nombre de dominio y el alias cuando el nombre de dominio se especifica con el prefijo www.

nombre_servidor prueba.net www.test.net;

A continuación, basta con especificar una directiva location que establezca la configuración del sitio en función del nombre URI especificado en la petición. En nuestro caso, tendrá un aspecto sencillo

location / { try_files $uri $uri/ =404; }

Esto significa que primero se comprobarán los archivos, luego los directorios, y si no se encuentra nada adecuado, se devolverá Not Found (404).

Esto es todo con el fichero de configuración. Su contenido final es el siguiente:

#cat /etc/nginx/sitios-disponibles/prueba.net
server { root /var/www/test.net/html; index index.html index.htm index.nginx-debian.html; server_name test.net www.test.net; location / { try_files $uri $uri/ =404; } }

Todas las demás directivas y sus valores se pueden leer en la documentación oficial de Nginx, que está aquí http://nginx.org/en/docs/.

Ahora tenemos el contenido del sitio y su archivo de configuración. Queda incluirlo. Para ello, crea un enlace simbólico:

ln -s /etc/nginx/sites-available/test.net /etc/nginx/sites-enabled/

Reinicia el servidor para que los cambios surtan efecto:

/etc/init.d/nginx restart

Comprobemos el funcionamiento del recurso creado.

Para abrir una página, puede que necesites añadir una línea al archivo hosts del ordenador desde el que estás comprobando:

xxx.xxx.xxx.xxx prueba.net

Где xxx.xxx.xxx.xxx - это IP-адрес сервера с установленным Nginx. Файл hosts, находится:

  • C:\Windows\System32\drivers\etc (в Win7);
  • /etc/hosts (в Debian).

Hemos instalado Nginx y php5-fpm, así como hecho el sitio más simple. El siguiente paso es configurar PHP y aplicarlo con Nginx.

En primer lugar, vamos a crear una página con código PHP en nuestro host virtual. Vamos a hacer el archivo /var/www/test.net/html/info.php como sigue:

<?php phpinfo(); ?>

Ahora abra esta página en el navegador http://test.net/info.php

¿Pero qué pasa con la ejecución del código PHP? Un código PHP que no ejecutamos porque el intérprete PHP no está configurado en Nginx. Hagamos esto

Abra nuestro archivo de configuración /etc/nginx/sites-available/test.net. Añade la siguiente directiva de bloque:

location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }

Esta directiva describe los parámetros para procesar las consultas que van a archivos PHP. No describiré cada parámetro y su valor. Esta información se puede encontrar en la documentación oficial aquí http://nginx.org/en/docs/dirindex.html

Ahora nuestro fichero de configuración es el siguiente

server { root /var/www/test.net/html; index index.html index.htm index.nginx-debian.html; server_name test.net www.test.net; location / { try_files $uri $uri/ =404; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }

Guardamos los cambios en el archivo y reiniciamos nuestro servidor Nginx.

/etc/init.d/nginx restart

Ahora vamos a intentar de nuevo abrir http://test.net/info.php. El resultado debería ser el siguiente:

He marcado la información en la captura de pantalla que indica el uso del gestor FPM.

De hecho, la configuración más simple de Nginx + servidor PHP-FPM está completa. El sitio más simple es creado y configurado para trabajar con PHP.

Consulte el siguiente artículo sobre la configuración de PHP-FPM.

DedicServerEN