Cómo instalar Nginx PHP y Mysql en Linux (LEMP server)

En este artículo se listan los pasos básicos para configurar un servidor web en Linux que permita el funcionamiento de una aplicación o página web que funcione con el lenguaje de programación PHP y el motor de bases de datos MySQL.

A esta configuración se le denomina LEMP server, porque es la manera simplificada de decir: “Linux, Nginx, MySQL y PHP”.


Creación de un nuevo usuario con privilegios de administración en Linux

Creación del usuario

sudo adduser nombre_de_usuario

Inmediatamente la consola te solicitará ingresar una contraseña para ese nuevo usuario. Luego, otra información adicional.

Agregar usuario al grupo de súper usuarios para brindar los privilegios de administración

sudo usermod -aG sudo nombre_de_usuario

Iniciar sesión con el nuevo usuario

su nombre_de_usuario

La consola solicita la contraseña ingresada en el momento de la creación.

Actualización de paquetes del servidor

Si apenas creaste el servidor sería conveniente actualizar su software.

Actualizar el listado de paquetes

sudo apt-get update

Actualizar los paquetes ya instalados

sudo apt-get upgrade

Instalación de NGINX

NGINX es un servidor web de código abierto que permite gestionar la comunicación entre una persona que solicita una página o aplicación web con el servidor que lo hospeda.

Instalación de NGINX

sudo apt-get install nginx

Instalación del sistema de base de datos MySQL server

Instale un sistema gestor de bases de datos para que almacene y administre datos en su sitio web.

Instalación de MySLQ server

sudo apt-get install mysql-server

Durante la instalación la consola le va a solicitar que precione la tecla “y” para completar la instalación.

Mejorar la seguridad de MySQL server

Las configuraciones por defecto tras la instalación de MySQL server suelen ser inseguras. Así que se recomienda que se configuren unas directivas que mejoran notablemente la seguridad.

Para iniciar con el asistente de seguridad, ingrese la siguiente instrucción en la consola:

sudo mysql_secure_installation

Cuando ejecute el comando, la consola le imprimirá el siguiente aviso:

VALIDATE PASSWORD COMPONENT can be used to test passwordsand improve security. It checks the strength of passwordand allows the users to set only those passwords which aresecure enough. Would you like to setup VALIDATE PASSWORD component?Press y|Y for Yes, any other key for No:

Presione “y” para continuar y habilitar el componente para contraseñas.

Una vez inicie el asistente, se le preguntará qué grado de seguridad desea tener en sus contraseñas:

There are three levels of password validation policy:LOW    Length >= 8MEDIUM Length >= 8, numeric, mixed case, and special charactersSTRONG Length >= 8, numeric, mixed case, special characters and dictionary                  filePlease enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:

Precione “0”, “1” o “2” dependiendo de la configuración que usted desee.

De ahí, el asistente le solicitará que ingrese la contraseña para el usuario root y le calificará el grado de seguridad de la misma, además, le preguntará si desea mantenerla o no:

Please set the password for root here.New password:Re-enter new password:Estimated strength of the password: 100Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :
Debe introducir la misma contraseña dos veces

Vaya aceptando con “y” y presionando Enter las configuraciones que le sugiera el asistente. Así eliminará algunos usuarios anónimos, deshabilitará la posibilidad de acceder a su gestor de base de datos de forma remota y la base de datos de prueba.


Instalación de PHP

A continuación se instalará en el servidor PHP para que pueda ejecutar aplicaciones basadas en este lenguaje de programación.

La diferencia entre APACHE y NGINX es que el primero integra el intérprete PHP por defecto, en cambio, con NGINX, se debe instalar un programa externo para que pueda interpretar el lenguaje de programación.

Al tener que instalar un programa externo, se creería que el rendimiento se vería afectado; pero en realidad, se considera que es un aspecto que mejora el rendimiento de aplicaciones hechas en PHP.

Entonces, se deberá instalar el paquete “php-fpm” que significa “PHP FastCGI Process Manager”, que se encarga de indicarle a NGINX que pase solicitudes PHP a este software para poder interpretarlo.

Por otra parte, se deberá instalar el paquete “php-mysql” para adivina qué… Si, lograr que las aplicaciones PHP puedan comunicarse con una base de datos creada con el motor de bases de datos MySQL.

PHP tiene unos paquetes básicos que igual serán instalados por defecto.

Instrucción para instalar PHP y que este funcione con NGINX y MySQL

sudo apt-get install php-fpm php-mysql

Configurar NGINX para ejecutar aplicaciones hechas con PHP

Con NGINX creamos bloques de servidor que contienen los detalles de configuración de cada nombre de donimio; lo que nos permite alojar más de un sitio web en un mismo web server.

Los bloques de servidor son algo parecido a los host virtuales de Apache.

A partir de Ubuntu 20.04, NGINX dispone de un bloque de servidor configurado por defecto que nos permite suministrar documentos a Internet a través del directorio /var/www/html. Esta configuración funciona cuando deseamos alojar un solo sitio o aplicación web, pero no es la adecuada cuando intentemos alojar varios.

Entonces, para configurar diferentes nombres de dominio, crearemos una estructura de carpetas a partir de /var/www y el directorio /var/www/html lo dejaremos intacto para cuando un cliente acceda de forma equivocada a documentos alojados en nuestro servidor.

Creación de un directorio web para un nuevo nombre de dominio

sudo mkdir /var/www/nombre_de_dominio

Asignar propiedad del directorio a un usuario

sudo chown -R nombre_de_usuario:nombre_de_usuario /var/www/nombre_de_dominio

Si utilizas $user en lugar de nombre_de_usuario indicarás la propiedad al usuario logueado en consola.

Creación y activación del bloque de servidor

NGINX por sí solo no sabe que el directorio /var/www/nombre_de_dominio está funcionando como una carpeta que aloja documentos disponibles en Internet. Por ello, se deben crear y activar los bloques de servidor, para que cuando un cliente ingrese el nombre de dominio en el navegador sea llevado al directorio que contiene la información que está solicitando con ese nombre de dominio.

Creación del bloque

sudo vi /etc/nginx/sites-available/nombre_de_dominio

Esta es la información básica que debe ir en el documento que contiene las configuraciones del bloque de servidor:

server {    listen 80;    server_name nombre_de_dominio www.nombre_de_dominio;    root /var/www/nombre_de_dominio;    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;    }}

Para este ejemplo se utilizó el editor de texto vi, pero se puede utilizar vim o nano.

  • listen. Es el número de puerto que NGINX escuchará. En este caso, escucha el puerto 80, el puerto del protocolo HTTP
  • server_name. Le indica a NGINX con qué nombre de dominio o IP se puede acceder a este bloque de servidor. Coloque el que corresponda.
  • root. Indica a NGINX el directorio que contiene los documentos disponibles en Internet para ese nombre de dominio
  • index. Le informa a NGINX el documento índice del directorio y su orden de prioridad. Por ejemplo, el servidor mostrará primero el documento index.html, luego el index.htm y por último el index.php. Esta configuración depende de las necesidades
  • location /. Primer bloque de ubicación. Este contiene información que confirma la existencia de archivos o directorios que coincidan con una solicitud URI a través de la directiva try_files
  • location ~ .php$. Este bloque de ubicación administra el procesamiento de PHP y orienta a NGINX hacia los documentos de configuración: fastcgi-php.conf y php7.4-fpm.sock, este último declara el socket que se asocia con php-fpm
  • location ~ /.ht. Este último bloque de ubicación es un manejador de archivos .htaccesss que NGINX no procesa. Con la directiva deny all, si algunos de estos documentos se encuentran en el root del directorio, estos no se suminstran a los visitantes

Activación del bloque

Para la activación del bloque recién configurado se debe vincular el archivo de texto creado en sites-available hacia sites-enabled. Esto, le indicará a NGINX que utilice la configuración descrita en el documento la próxima vez que inicie.

sudo ln -s /etc/nginx/sites-available/nombre_de_dominio /etc/nginx/sites-enabled/

Para identificar errores de sintaxys en el documento de creación del bloque utiliza: sudo nginx -t

Para finalizar, reinicie el servicio NGINX

sudo systemctl reload nginx
Scroll to Top