Instalación de Nginx y la pila LEMP en Debian 11 «Bullseye» 3
Instalacion y configuración de PHP
Ya hemos visto como hacer la instalación y configuración de ssh y UFW, y como instalar un servidor web nginx y un servidor de bases de datos MariaDB. El siguiente paso es instalar PHP y ver como se administra nginx.
Sumario
- Instalación de PHP
- Configuración de Nginx
- Creación de bloques de servidor
- Administrar el servidor web Nginx
- Ficheros y directorios importantes en Nginx
Apache integra el intérprete PHP en cada solicitud, pero Nginx necesita un software externo para gestionar el procesamiento de PHP y actuar como puente entre el intérprete PHP y el servidor web, lo que permite un mayor rendimiento general de los sitios web basados en PHP.
Para ello tenemos que instalar el paquete «php-fpm» (PHP fastCGI process manager), y configurarlo para que Nginx pase solicitudes PHP a este software para su procesamiento. Como lo vamos a hacer en remoto, desde nuestra máquina cliente Ubuntu 20.04, nos conectamos al servidor con ssh.
ssh usuario@ip_servidor
Instalación de PHP
También necesitaremos «php-mysql», un módulo que permite a PHP comunicarse con las bases de datos basadas en MySQL. Con el siguiente comando, los paquetes PHP básicos se instalarán automáticamente como dependencias. Como siempre hay que actualizar la lista de paquetes de los repositorios.
sudo apt install php-fpm php-mysql
Nos pedirá confirmación, con «S» y «enter» terminará la instalación.
Configuración de Nginx. Creación de bloques de servidor.
Al igual que con Apache creamos «hosts virtuales», con Nginx tenemos que crear «bloques de servidor», que tienen la misma funcionalidad para alojar varios dominios en un solo servidor.
Nginx tiene un bloque de servidor habilitado por defecto para servir contenidos desde el directorio /var/www/html, al igual que Apache. Pero si queremos alojar más de un sitio web, es recomendable cambiar la estructura de esta ruta a /var/www/ y colgar de este directorio los dominios que vamos a servir.
No obstante, mantendremos /var/www/html para las solicitudes que reciba el servidor y que no coincidan con ningún dominio alojado.
Vamos a crear el primer bloque. Creamos el directorio con el siguiente comando
sudo mkdir -p /var/www/weblinus.com.local/public_html
Utilizamos la opción -p para crear cualquier directorio principal necesario
Podemos eliminar el fichero de configuración proporcionado por defecto por Nginx (no es necesario), o cambiarle el nombre, para ello ejecutamos
sudo rm -f /etc/nginx/sites-enabled/default
El siguiente paso será cambiar la propiedad del directorio creado. Para ello haremos uso de la variable $USER, y asignaremos la propiedad del directorio al usuario del sistema. O podemos asignarlo con www-data que es el usuario de Nginx.
sudo chown -R $USER:$USER /var/www/weblinus.com.local
Los permisos deberían ser correctos si hemos modificado el valor «umask», pero podemos comprobarlo ejecutando
sudo chmod -R 755 /var/www/weblinus.com.local
Para configurar este bloque tenemos que editar un fichero en el directorio sites-available de Nginx, que se encuentra en la ruta /etc/nginx/sites-available/
sudo nano /etc/nginx/sites-available/weblinus.com.local.conf
El fichero estará vacío. Fijate en la extensión .conf, si no la añades no funcionará. Tenemos que introducir el siguiente contenido
server { listen 80; server_name weblinus.com.local www.weblinus.com.local; root /var/www/weblinus.com.local; #root /var/www/weblinus.com.local/public_html; index index.html index.htm index.php; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } location ~ /\.ht { deny all; } }
Analicemos este fichero
listen: Indicamos el puerto en el que Nginx escuchará. En este caso, configuramos el puerto 80, el predeterminado para HTTP.
server_name: definimos los nombres de dominio y/o direcciones de IP a los que debe responder este bloque de servidor.
root: define el document root en el que se almacenan los contenidos que este sitio web servirá.
index: Esta directiva establece el orden de prioridad que Nginx dará a los ficheros de índice de este sitio web. Lo habitual es dar prioridad a los ficheros index.html sobre los index.php para establecer, de manera rápida, una página inicial de mantenimiento en las aplicaciones de PHP. Estas opciones de configuración se pueden modificar para adaptarlas a las necesidades de nuestra aplicación web.
location /: En este primer bloque de ubicación incluimos la directiva try_files, que comprobará la existencia de ficheros o directorios coincidentes con una solicitud de URI. Si Nginx no encontrase el recurso solicitado, mostrará un error 404.
location ~ .php$: Este bloque de ubicación gestiona el funcionamiento de PHP orientando al fichero de configuración del servidor «fastcgi-php.conf» y al fichero «php7.4-fpm.sock», que establece el socket que se asocia con «php-fpm».
location ~ /.ht: Este bloque de ubicación gestiona los ficheros .htaccess, que Nginx no procesa. Añadiendo la directiva «deny all», si alguno de los ficheros .htaccess se introducen en el document root, no se servirán los contenidos solicitados.
Guardamos el fichero
Una vez creado este fichero lo guardamos y cerramos. El siguiente paso, para activar este bloque, será establecer un enlace con el fichero de configuración del directorio «sites-enabled» de Nginx.
sudo ln -s /etc/nginx/sites-available/weblinus.com.local.conf /etc/nginx/sites-enabled/
Y verificamos si hay algún error de sintaxis
sudo nginx -t
Para aplicar estas configuraciones tenemos que recargar Nginx
sudo systemctl reload nginx
Y con esto hemos terminado la configuración del bloque, pero el «document root» en /var/www/weblinus.com.local/public_html, lo tenemos vacío. Tenemos que crear un fichero «index.html» en esta ruta y probar que todo funciona como debe. Editamos,
sudo nano /var/www/weblinus.com.local/public_html/index.html
Y creamos un documento html, por ejemplo (copia y pega cambiando datos para tu dominio)
<html> <head> <title>weblinus.com</title> </head> <body> <h1>!!!Funciona!!!</h1> <p>Este es el sitio web <strong>weblinus.com</strong>.</p> </body> </html>
Para comprobar si funciona, abrimos un navegador e introducimos nuestro dominio o la IP del servidor
http://weblinus.com.local o http://IP_del_servidor
Y veremos nuestra página recién creada.
Cuando creemos el fichero definitivo a servir «index.php», tendremos que eliminar el fichero «index.html» del document root o cambiarle el nombre, ya que si no lo hacemos, este tendrá preeminencia sobre el «index.php».
Si queremos crear nuevos sitios tenemos que repetir todos los pasos creando nuevos bloques.
Y finalmente tenemos toda la pila LEMP instalada y configurada.
Administrar el servidor web Nginx
Para administrar nuestro servidor web con Nginx, tenemos algunos comandos, que utilizan «systemctl». Vamos a verlos.
Para conseguir que Nginx se inicie con el reinicio del sistema
sudo systemctl enable nginx
Si queremos deshabilitar esta función
sudo systemctl disable nginx
Para verificar el estado en Nginx
sudo systemctl status nginx
Para iniciar el servidor web
sudo systemctl start nginx
Si queremos recargar el servidor
sudo systemctl reload nginx
Para detener el servidor Nginx
sudo systemctl stop nginx
Y para reiniciar el servidor Nginx
sudo systemctl restart nginx
Ficheros y directorios importantes en Nginx
A modo de resumen veamos los directorios y ficheros de configuración más importantes de Nginx.
/var/www/html | el contenido web real, que por defecto solo consta de la página predeterminada de Nginx que vimos antes, se presenta desde el directorio /var/www/html. Esto se puede cambiar, como hemos visto, modificando los archivos de configuración de Nginx, para servir otros sitios con el mismo servidor. |
/etc/nginx | directorio de configuración de Nginx. En él encontramos todos los archivos de configuración de Nginx. |
/etc/nginx/nginx.conf | archivo de configuración principal de Nginx. Esto se puede modificar para realizar cambios en la configuración general de Nginx. |
/etc/nginx/sites-available/ | directorio en el que se guardan bloques de servidor por cada sitio creado. Nginx no utilizará los archivos de configuración de este directorio a menos que estén vinculados al directorio sites-enabled. Normalmente, toda la configuración del bloque de servidor se realiza en este directorio y luego se habilita estableciendo un enlace con el otro directorio. |
/etc/nginx/sites-enabled/ | En este directorio se almacenan los bloques de servidor habilitados por sitio. Normalmente, estos se crean estableciendo vínculos con los archivos de configuración del directorio sites-available. |
/etc/nginx/snippets | este directorio contiene fragmentos de configuración que pueden incluirse en otras partes de la configuración de Nginx. Los segmentos de configuración potencialmente repetibles reúnen las condiciones para la conversión a fragmentos. |
/var/log/nginx/access.log | cada solicitud a nuestro servidor web se registra en este archivo de registro, a menos que Nginx esté configurado para hacer algo diferente. |
/var/log/nginx/error.log | cualquier error de Nginx se guardará en este registro. |
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.