Nginx es el software mas popular para montar servidores web ya que es un programa muy liviano en cuanto a uso de recursos computacionales pero muy potente a la hora de servir multiples peticiones concurrentes.
Se pronuncia Engine-X y lo veremos en conjunto con linux LEMP (Linux-eNginx-MySQL-PHP) ó LEPP (Linux-eNginx-Postgres-PHP).
Instalación de Nginx
Actualiza la lista de paquetes disponibles
sudo apt update
Instalar Nginx
sudo apt install nginx -y
Corroborar estado del servicio Nginx en la maquina
sudo service nginx status
Si Nginx esta correctamente instalado y activo en el sistema al ejecutar el comando anterior en la consola debemos ver un mensaje como el siguiente:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Thu 2024-10-10 16:35:23 UTC; 3 weeks 6 days ago
Docs: man:nginx(8)
Main PID: 497 (nginx)
Tasks: 3 (limit: 1107)
Memory: 11.1M
CPU: 1min 11.122s
CGroup: /system.slice/nginx.service
├─497 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
├─502 "nginx: worker process"
└─503 "nginx: worker process"
Oct 10 16:35:22 ip-172-31-46-146 systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
Corroborar el funcionamiento de nuestro servidor web
Al visitar la Ip publica de nuestro servidor web deberíamos poder ver la página por defecto de Nginx.
En caso de no conocer nuestra Ip publica podríamos intentar averiguarla haciendo una petición web al sitio: https://icanhazip.com
curl -4 icanhazip.com
Visitando la Ip publica de nuestro servidor deberíamos ver una página como la siguiente:
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
En caso de problemas
En caso de que no podamos ver el mensaje de bienvenida de Nginx puede que el software no este activado o que el Firewall nos este bloqueando. De ser así hay que volver y verificar que el programa este correctamente instalado y habilitado en el servidor y que el acceso web no este bloqueado por el Firewall.
También puede ser el caso de que al visitar la Ip del servidor esta halla sido cacheada y se muestre un mensaje de error aunque ya todo este funcionando correctamente.
Trabajar con Nginx
Tras haber configurado Nginx correctamente ya podemos trabajar con el, incluso sin configurar mas cosas, ya que por defecto el software permite acceso web a los documentos y archivos dentro del directorio /var/www/html de nuestra maquina Linux, por lo que podemos empezar a subir cosas aquí, pero lo recomendable será proceder por otro lado.
Lo normal tras instalar Nginx será configurar otras cosas antes de empezar a montar archivos web, entre esas otras acciones estarían:
- Agregar un nombre de dominio
- Configurar un firewall para mejorar la seguridad del servidor
- Añadir un certificado SSL para proteger los datos que entren y salgan del sitio web
- Instalar y configurar PHP
- Crear mas archivos de configuración para gestionar mas de un sitio web en la misma maquina (Virtual hosts)
- Realizar otras configuraciones de Nginx para casos en particular (Balanceo de carga, proxy inverso, redirección de trafico, etc)
Añadir mas sitios a Nginx
En una misma maquina de Linux podemos procesar peticiones de multiples dominios o subdominios, para ello debemos crear archivos de configuración de Nginx para indicarle que hacer cuando le lleguen peticiones para dichos sitios web, a continuación veremos paso por paso sobre este proceso.
Preparar la ubicación física del nuevo sitio
Para poder añadir un sitio a Nginx primero deberíamos preparar los archivos dentro de la maquina, lo normal es añadir un nuevo directorio para cada proyecto diferente dentro del directorio /var/www, cada nuevo directorio debe contar con los permisos adecuados para poder ser servido por Nginx a internet de forma publica, y en el directorio del proyecto debemos montar los archivos de nuestro sitio web, para poder hacerlo podríamos subirlos por Git, por FTP o por SSH.
Crear directorio para el sitio web
sudo mkdir -p /var/www/newproyect/public
Crear un archivo index (Opcional)
Si aún no vas a subir los archivos finales del sitio web te aconsejo crear un archivo index.html con algún mensaje de sitio en construcción, para ello usaremos el comando nano, luego escribiremos algo de HTML básico y guardaremos el archivo con CTRL+X
sudo nano /var/www/newproyect/public/index.html
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sitio en construcción</title>
</head>
<body>
<h1>Nuevo sitio web en construcción, vuelva pronto</h1>
</body>
</html>
Asignar www-data como propietario del directorio web
sudo chown -R www-data:www-data /var/www/newproyect/public
Asignar los permisos de lectura, escritura y ejecución correspondientes
sudo chmod -R 755 /var/www/newproyect/public
En Linux debemos configurar siempre los permisos adecuados para nuestros programas y archivos, para poder servir públicamente archivos en nuestro servidor web Nginx debemos configurar dichos archivos para que el usuario www-data tenga acceso a ellos ya que es el usuario que usara Nginx.
Crear archivo de configuración Nginx
Nginx cuenta con la carpeta /etc/nginx/sites-available para indicarle que sitios web están disponibles, con el siguiente comando vamos a crear un archivo nuevo para nuestro sitio de prueba:
sudo nano /etc/nginx/sites-available/newproyect
A continuación el contenido que deberemos poner en el archivo y para salir debemos pulsar CTRL+x y luego debemos ingresar «y» para que Linux guarde nuestro archivo.
server {
# Log files for Debugging
access_log /var/log/nginx/newproyect-access.log;
error_log /var/log/nginx/newproyect-error.log;
# Root Directory for web
root /var/www/web/newproyect/public;
# Default index extension
index index.php index.html index.htm;
# Your Domain Name
server_name newproyect.test;
location / {
try_files $uri $uri/ =404;
}
}
Habilitar el nuevo sitio en Nginx
Finalmente debemos habilitar nuestro archivo de configuración de Nginx para que el nuevo sitio pueda funcionar, para ello Nginx cuenta con el directorio /etc/nginx/sites-available y en el demos crear un enlace al archivo creado en el paso anterior, para crear el enlace se usa el comando de Linux ln y lo haremos de la siguiente forma:
sudo ln -s /etc/nginx/sites-available/newproyect /etc/nginx/sites-enabled/newproyect
Verificar validez de los archivos de configuración
sudo nginx -t
Reiniciar Nginx para aplicar cambios
sudo service nginx restart
En cualquier momento podemos corroborar que el servicio de Nginx este corriendo en el servidor, cuando los archivos de configuración son inválidos el proceso no podrá iniciar.
sudo service nginx status
Con todo esto ya tendríamos listo nuestro nuevo sitio web en Nginx, si queremos añadir mas nombres de dominio o subdominios solo debemos repetir el proceso.
Tras completar el proceso ya podemos acceder a nuestros sitios usando cualquier navegador web y dirigiéndonos a nuestro nombre de dominio.
Habilitar PHP en nuestro sitio web
Para habilitar PHP debemos primero instalar y configurar PHP FPM en la versión que requiera nuestra aplicación y luego debemos añadir unas líneas extra al archivo de configuración en nuestro archivo de NGINX para el sitio que necesitamos.
A continuación veremos las líneas de configuración que debemos agregar para habilitar PHP, que para este ejemplo será la version PHP 8.3, y estas líneas deben agregarse dentro del bloque location{…}.
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_read_timeout 500;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Procedemos a abrir el archivo /etc/nginx/sites-available/newproyect con nano, agregamos las líneas y luego salimos guardando el archivo, para a continuación reiniciar Nginx:
sudo nano /etc/nginx/sites-available/newproyect
Nuestro archivo debe quedar de la siguiente forma:
server {
# Log files for Debugging
access_log /var/log/nginx/newproyect-access.log;
error_log /var/log/nginx/newproyect-error.log;
# Root Directory for web
root /var/www/web/newproyect/public;
# Default index extension
index index.php index.html index.htm;
# Your Domain Name
server_name newproyect.test;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP-FPM Configuration Nginx
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_read_timeout 500;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Verificar validez del archivo de configuración Nginx
sudo nginx -t
Reiniciar proceso de Nginx para aplicar cambios
sudo service nginx restart
Conclusión
Debian aporta estabilidad casi quirúrgica, Nginx responde con eficiencia casi silenciosa, y PHP sigue siendo ese motor flexible que, correctamente afinado, puede rendir como un deportivo.
Al final, más que instalar servicios, construiste un ecosistema. Uno que puedes escalar, endurecer, automatizar o incluso romper y reconstruir para entenderlo mejor. Y en ese proceso, pasas de usuario a arquitecto.