Nginx es un servidor web / proxy inverso ligero, de alto rendimiento y de código abierto.
Debido a su excelente capacidad para manejar muchas conexiones y a su velocidad, muchos sitios web de alto tráfico usan el servicio de NGINX. Algunos de estos gigantes del internet son Google, Netflix, Adobe, Cloudflare o WordPress.com.
En este artículo veremos como instalar y configurar este servidor web en un sistema Ubuntu 18.04.
Requisitos Previos
Como requisito previo necesitaremos tener una máquina con Ubuntu 18.04 ya configurada, y acceso a un usuario con privilegios.
Paso 1 – Instalación de Nginx
En primer lugar, vamos a actualizar nuestro índice de paquetes. Una vez hecho podremos instalar Nginx.
sudo apt update
sudo apt install nginx
Tras esto se instalará Nginx y todas las dependencias necesarias.
Paso 2 – Añadir reglas al Firewall
Es recomendable tener activado el firewall por lo que vamos a añadir una regla al mismo para permitir el funcionamiento de Nginx.
Podremos agregar cualquiera de los tres perfiles disponibles:
Nginx FULL
Nginx HTTP
Nginx HTTPS
Activaremos alguno de ellos en función de si vamos a trabajar con HTTPS o no.
sudo ufw allow 'Nginx Full'
Tras esto verificaremos los cambios y aparecerá algo como lo siguiente.
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Podemos ver una lista con las aplicaciones disponibles en UFW utilizando el siguiente comando.
sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Paso 3 – Probar el servidor web
En este punto, el servidor ya debería estar ejecutándose. Para comprobarlo utilizaremos el siguiente comando.
systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-04-14 07:22:45 UTC; 1min 46s ago
Docs: man:nginx(8)
Process: 2371 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 2359 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 2373 (nginx)
Tasks: 2 (limit: 503)
CGroup: /system.slice/nginx.service
├─2373 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2377 nginx: worker process
Si todo es correcto y el servicio está activo podremos acceder a la página por defecto de Nginx utilizando la dirección IP de nuestro servidor.

Si no funciona podemos reiniciar el servicio utilizando los siguientes comandos.
sudo systemctl stop nginx
sudo systemctl start nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl disable nginx
sudo systemctl enable nginx
Paso 4 – Crear los bloques de servidor
Los bloques de servidor de Nginx permiten alojar más de un sitio y separar la configuración de cada uno (parecidos a los Virtual Host de Apache). Siempre es recomendable configurarlo al hacer que el mantenimiento sea más sencillo.
Para este ejemplo utilizaremos el dominio ejemplo.com. En tu caso deberás sustituirlo por tu dominio. Si no tienes un dominio todavía y solo quieres acceder desde un equipo para hacer pruebas, puedes abrir el fichero hosts de windows y añadir una línea que apunte a la IP de tu servidor. Ten en cuenta que esto solo funcionará en tu red local y desde los equipos a los que se lo has añadido.
192.168.1.X ejemplo.com # Ahora ejemplo.com funcionará en LAN
Una vez tenemos el dominio configurado crearemos las carpetas que contendrán los sitios y daremos los permisos necesarios a nuestro usuario y a la carpeta.
sudo mkdir -p /var/www/ejemplo.com/html
sudo chown -R $USER:$USER /var/www/ejemplo.com/html
sudo chmod -R 755 /var/www/ejemplo.com
Ahora que ya tenemos dónde guardar nuestro primer sitio crearemos el bloque de servidor que dirá a Nginx dónde se encuentra y que dominio utiliza.
sudo nano /etc/nginx/sites-available/ejemplo.com.conf
Pega dentro del nuevo archivo el siguiente código.
server {
listen 80;
listen [::]:80;
root /var/www/ejemplo.com/html;
index index.html index.htm index.nginx-debian.html;
server_name ejemplo.com www.ejemplo.com;
location / {
try_files $uri $uri/ =404;
}
}
La variable root
establece la carpeta donde se encuentra el sitio y la variable server_name
la relaciona con nuestro dominio. Por cada sitio que tengamos estableceremos un nueva carpeta y dominio o subdominio.
Guardamos los cambios y cerramos el fichero.
Tras esto vamos a habilitar el bloque creando un enlace al fichero de configuración en la carpeta sites-enabled
.
sudo ln -s /etc/nginx/sites-available/ejemplo.com.conf /etc/nginx/sites-enabled/
En este momento tendremos dos bloques de servidor habilitados. En primer lugar el que acabamos de crear que responderá a las peticiones de ejemplo.com, y en segundo lugar el bloque predeterminado que responderá a cualquier solicitud que no coincida con los otros bloques.
Por último haremos un pequeño cambio en la configuración de Nginx que evita posibles problemas de memoria. Abrimos el archivo.
sudo nano /etc/nginx/nginx.conf
Buscamos la línea server_names_hash_bucket_size
y quitamos el símbolo #
para descomentar.
Después comprobamos que no hay errores de configuración con el siguiente comando.
sudo nginx -t
Paso 5 – Probar nuestro sitio
Ahora, vamos a añadir una página de prueba para ver que todo funciona. Creamos un fichero index en la carpeta de nuestro sitio.
nano /var/www/ejemplo.com/html/index.html
Y añadimos el siguiente contenido.
<html>
<head>
<title>Bienvenido a ejemplo.com!</title>
</head>
<body>
<h1>El sitio funciona correctamente.</h1>
</body>
</html>
Reiniciamos Nginx.
sudo systemctl restart nginx
Y si todo funciona correctamente deberíamos ver la página de nuestro sitio accediendo a http://ejemplo.com
.
Directorios y ficheros útiles de Nginx
Aquí dejo una serie de ficheros y directorios que se suelen utilizar.
Sitios
Es recomendable guardar todos nuestros sitios de forma consistente, las rutas más utilizadas suelen ser las siguientes:
/var/www/domain.com/html
/opt/domain.com
Logs
/var/log/nginx/error.log
guarda los errores del servidor./var/log/nginx/access.log
guarda las solicitudes que se hacen.
Configuración
/etc/nginx/nginx.conf
configuración de Nginx./etc/nginx/sites-available/
bloques del servidor./etc/nginx/sites-enabled/
se guardan los vínculos a los bloques de servidor para habilitarlos.