Introducción
Nginx es uno de los servidores web más populares del mundo y aloja algunos de los sitios web más grandes y con mayor tráfico de internet. Es una opción ligera que puede usarse como servidor web o como proxy inverso.
En esta guía, analizaremos cómo instalar Nginx en su servidor Ubuntu 22.04, ajustar el firewall, administrar el proceso Nginx y configurar bloques de servidor para alojar más de un dominio desde un solo servidor.
Prerrequisitos
Antes de comenzar esta guía, debe tener configurado en su servidor un usuario normal (no root) con privilegios de sudo. Puede aprender a configurar una cuenta de usuario normal siguiendo nuestra Guía de configuración inicial del servidor para Ubuntu 22.04 .
Cuando tenga una cuenta disponible, inicie sesión como usuario no root para comenzar.
Paso 1: Instalación de Nginx
Como Nginx está disponible en los repositorios predeterminados de Ubuntu, es posible instalarlo desde estos repositorios utilizando el apt
sistema de empaquetado.
Dado que esta es nuestra primera interacción con el apt
sistema de empaquetado en esta sesión, actualizaremos nuestro índice de paquetes local para tener acceso a los listados de paquetes más recientes. Después, podremos instalar nginx
:
sudo apt update
sudo apt install nginx
Pulse Y
cuando se le solicite para confirmar la instalación. Si se le solicita reiniciar algún servicio, pulse ENTER
para aceptar los valores predeterminados y continuar. apt
Se instalará Nginx y las dependencias necesarias en su servidor.
Paso 2 – Ajuste del firewall
Antes de probar Nginx, es necesario configurar el firewall para permitir el acceso al servicio. Nginx se registra como servicio al ufw
instalarse, lo que facilita su acceso.
Enumere las configuraciones de la aplicación ufw
con la que sabe trabajar escribiendo:
sudo ufw app list
Debería obtener una lista de los perfiles de la aplicación:
OutputAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Como lo demuestra el resultado, hay tres perfiles disponibles para Nginx:
- Nginx Full : este perfil abre tanto el puerto 80 (tráfico web normal, sin cifrar) como el puerto 443 (tráfico cifrado TLS/SSL)
- Nginx HTTP : este perfil solo abre el puerto 80 (tráfico web normal, sin cifrar)
- Nginx HTTPS : este perfil solo abre el puerto 443 (tráfico cifrado TLS/SSL)
Se recomienda habilitar el perfil más restrictivo que permita el tráfico configurado. Por ahora, solo necesitamos permitir el tráfico en el puerto 80.
Puedes habilitar esto escribiendo:
sudo ufw allow 'Nginx HTTP'
Puedes verificar el cambio escribiendo:
sudo ufw status
La salida indicará qué tráfico HTTP está permitido:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Paso 3 – Comprobación de su servidor web
Al finalizar la instalación, Ubuntu 22.04 inicia Nginx. El servidor web ya debería estar en funcionamiento.
Podemos verificar con el systemd
sistema de inicio para asegurarnos de que el servicio se esté ejecutando escribiendo:
systemctl status nginx
Output● 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 Fri 2022-03-01 16:08:19 UTC; 3 days ago
Docs: man:nginx(8)
Main PID: 2369 (nginx)
Tasks: 2 (limit: 1153)
Memory: 3.5M
CGroup: /system.slice/nginx.service
├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2380 nginx: worker process
Como se confirma en este punto, el servicio se ha iniciado correctamente. Sin embargo, la mejor manera de comprobarlo es solicitar una página a Nginx.
Puede acceder a la página de inicio predeterminada de Nginx para confirmar que el software funciona correctamente navegando a la dirección IP de su servidor. Si desconoce la dirección IP de su servidor, puede encontrarla con la herramienta icanhazip.com , que le proporcionará su dirección IP pública, tal como la recibió de otra ubicación en internet:
curl -4 icanhazip.com
Cuando tenga la dirección IP de su servidor, ingrésela en la barra de direcciones de su navegador:
http://your_server_ip
Debería recibir la página de destino predeterminada de Nginx:

Si está en esta página, su servidor está funcionando correctamente y está listo para ser administrado.
Paso 4: Gestión del proceso Nginx
Ahora que tiene su servidor web en funcionamiento, repasemos algunos comandos de administración básicos.
Para detener su servidor web, escriba:
sudo systemctl stop nginx
Para iniciar el servidor web cuando esté detenido, escriba:
sudo systemctl start nginx
Para detener y luego iniciar nuevamente el servicio, escriba:
sudo systemctl restart nginx
Si solo realiza cambios de configuración, Nginx suele poder recargarse sin perder conexiones. Para ello, escriba:
sudo systemctl reload nginx
De forma predeterminada, Nginx está configurado para iniciarse automáticamente al arrancar el servidor. Si no desea que esto sea así, puede desactivar este comportamiento escribiendo:
sudo systemctl disable nginx
Para volver a habilitar el servicio para que se inicie durante el arranque, puede escribir:
sudo systemctl enable nginx
Ahora ha aprendido los comandos de administración básicos y debería estar listo para configurar el sitio para alojar más de un dominio.
Paso 5: Configuración de bloques de servidor (recomendado)
Al usar el servidor web Nginx, se pueden usar bloques de servidor (similares a los hosts virtuales de Apache) para encapsular los detalles de configuración y alojar más de un dominio desde un solo servidor. Configuraremos un dominio llamado “your_domain” , pero deberá reemplazarlo por su propio nombre de dominio .
Nginx en Ubuntu 22.04 tiene un bloque de servidor habilitado por defecto, configurado para servir documentos desde un directorio en /var/www/html
. Si bien esto funciona bien para un solo sitio, puede resultar complicado si se alojan varios. En lugar de modificar /var/www/html
, crearemos una estructura de directorios dentro /var/www
de nuestro sitio your_domain/var/www/html
, dejando este como directorio predeterminado para servir si una solicitud de cliente no coincide con ningún otro sitio.
Cree el directorio para su_dominio de la siguiente manera, utilizando la -p
bandera para crear cualquier directorio padre necesario:
sudo mkdir -p /var/www/your_domain/html
A continuación, asigne la propiedad del directorio con la $USER
variable de entorno:
sudo chown -R $USER:$USER /var/www/your_domain/html
Los permisos de sus raíces web deberían ser correctos si no ha modificado el umask
valor que establece los permisos de archivo predeterminados. Para garantizar que sus permisos sean correctos y permitir al propietario leer, escribir y ejecutar los archivos, mientras que solo otorga permisos de lectura y ejecución a grupos y otros, puede introducir el siguiente comando:
sudo chmod -R 755 /var/www/your_domain
A continuación, crea una index.html
página de muestra utilizando nano
tu editor favorito:
nano /var/www/your_domain/html/index.html
Dentro, agregue el siguiente HTML de muestra: /var/www/tu_dominio/html/index.html
<html>
<head>
<title>Welcome to your_domain!</title>
</head>
<body>
<h1>Success! The your_domain server block is working!</h1>
</body>
</html>
Guarde y cierre el archivo presionando Ctrl+X
para salir, luego cuando se le solicite guardar Y
y luego Enter
.
Para que Nginx muestre este contenido, es necesario crear un bloque de servidor con las directivas correctas. En lugar de modificar directamente el archivo de configuración predeterminado, crearemos uno nuevo en :/etc/nginx/sites-available/your_domain
sudo nano /etc/nginx/sites-available/your_domain
Pegue el siguiente bloque de configuración, que es similar al predeterminado, pero actualizado para nuestro nuevo directorio y nombre de dominio: /etc/nginx/sites-available/su_dominio
server {
listen 80;
listen [::]:80;
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
location / {
try_files $uri $uri/ =404;
}
}
Tenga en cuenta que hemos actualizado la root
configuración de nuestro nuevo directorio y server_name
de nuestro nombre de dominio.
A continuación, habilitemos el archivo creando un enlace desde él al sites-enabled
directorio que Nginx lee durante el inicio:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
Nota: Nginx utiliza una práctica común llamada enlaces simbólicos (symlinks) para rastrear cuáles de tus bloques de servidor están habilitados. Crear un enlace simbólico es como crear un acceso directo en el disco, de modo que puedas eliminarlo posteriormente del sites-enabled
directorio, conservando el bloque de servidor sites-available
si deseas habilitarlo.
Ahora hay dos bloques de servidor habilitados y configurados para responder a solicitudes según sus directivas listen
y server_name
(puede leer más sobre cómo Nginx procesa estas directivas aquí ):
your_domain
:Responderá a las solicitudes deyour_domain
ywww.your_domain
.default
:Responderá a cualquier solicitud en el puerto 80 que no coincida con los otros dos bloques.
Para evitar un posible problema de memoria en el contenedor hash que puede surgir al añadir nombres de servidor adicionales, es necesario ajustar un único valor en el /etc/nginx/nginx.conf
archivo. Abra el archivo:
sudo nano /etc/nginx/nginx.conf
Busca la server_names_hash_bucket_size
directiva y elimina el #
símbolo para descomentar la línea. Si usas nano, puedes buscar rápidamente palabras en el archivo presionando CTRL
y w
.
Nota: Comentar líneas de código, generalmente colocándolas #
al principio, es otra forma de deshabilitarlas sin necesidad de eliminarlas. Muchos archivos de configuración incluyen varias opciones comentadas para que puedan habilitarse o deshabilitarse alternando entre el código activo y la documentación. /etc/nginx/nginx.conf
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
Guarde y cierre el archivo cuando haya terminado.
A continuación, realice una prueba para asegurarse de que no haya errores de sintaxis en ninguno de sus archivos Nginx:
sudo nginx -t
Si no hay ningún problema, reinicie Nginx para habilitar los cambios:
sudo systemctl restart nginx
Nginx ya debería servir tu nombre de dominio. Puedes comprobarlo navegando a [nombre del dominio] , donde deberías ver algo como esto:http://your_domain
Paso 6: Familiarizarse con los archivos y directorios importantes de Nginx
Ahora que sabe cómo administrar el servicio Nginx, debería tomarse unos minutos para familiarizarse con algunos directorios y archivos importantes.
Contenido
/var/www/html
El contenido web, que por defecto solo consiste en la página predeterminada de Nginx que vio anteriormente, se sirve desde el/var/www/html
directorio. Esto se puede cambiar modificando los archivos de configuración de Nginx.
Configuración del servidor
/etc/nginx
El directorio de configuración de Nginx. Todos los archivos de configuración de Nginx se encuentran aquí./etc/nginx/nginx.conf
El archivo de configuración principal de Nginx. Se puede modificar para realizar cambios en la configuración global de Nginx./etc/nginx/sites-available/
El directorio donde se almacenan los bloques de servidor por sitio. Nginx no usará los archivos de configuración que se encuentran en este directorio a menos que estén vinculados a élsites-enabled
. Normalmente, toda la configuración de los bloques de servidor se realiza en este directorio y luego se habilita mediante la vinculación al otro directorio./etc/nginx/sites-enabled/
El directorio donde se almacenan los bloques de servidor habilitados por sitio. Normalmente, se crean mediante enlaces a los archivos de configuración que se encuentran en elsites-available
directorio./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 son ideales para refactorizarlos en fragmentos.
Registros del servidor
/var/log/nginx/access.log
:Cada solicitud a su servidor web se registra en este archivo de registro a menos que Nginx esté configurado para hacer lo contrario./var/log/nginx/error.log
:Cualquier error de Nginx se registrará en este registro.
Conclusión
Ahora que tiene su servidor web instalado, tiene muchas opciones para el tipo de contenido que desea servir y las tecnologías que desea utilizar para crear una experiencia más rica.
Si desea desarrollar una pila de aplicaciones más completa, consulte el artículo Cómo instalar Linux, Nginx, MySQL, PHP (pila LEMP) en Ubuntu 22.04 .
Para configurar HTTPS para su nombre de dominio con un certificado SSL gratuito usando Let’s Encrypt , debe continuar con Cómo proteger Nginx con Let’s Encrypt en Ubuntu 22.04 .