Introducción
Nginx es uno de los servidores web más populares en el mundo y es responsable de alojar algunos de los sitios web más grandes y con más tráfico en Internet. Es una opción ligera que se puede utilizar tanto como servidor web como proxy inverso.
En esta guía, discutiremos cómo instalar Nginx en tu servidor Ubuntu 20.04, ajustar el firewall, gestionar el proceso de Nginx y configurar bloques de servidor para alojar más de un dominio desde un solo servidor.
Simplifica el despliegue de aplicaciones con Plataforma de Aplicaciones de DigitalOcean. Despliega directamente desde GitHub en minutos.
Requisitos previos
Antes de comenzar esta guía, deberías tener un usuario regular, no root, con privilegios sudo configurado en tu servidor. Puedes aprender cómo configurar una cuenta de usuario regular siguiendo nuestra Guía de configuración inicial del servidor para Ubuntu 20.04.
También opcionalmente querrás haber registrado un nombre de dominio antes de completar los últimos pasos de este tutorial. Para obtener más información sobre cómo configurar un nombre de dominio con DigitalOcean, consulta nuestra Introducción a DigitalOcean DNS.
Cuando tengas una cuenta disponible, inicia sesión como tu usuario sin privilegios para comenzar.
Paso 1 – Instalación de Nginx
Debido a que Nginx está disponible en los repositorios predeterminados de Ubuntu, es posible instalarlo desde estos repositorios utilizando el sistema de empaquetado apt
.
Dado que esta es nuestra primera interacción con el sistema de empaquetado apt
en esta sesión, actualizaremos nuestro índice local de paquetes para tener acceso a las listas de paquetes más recientes. Después, podemos instalar nginx
:
Después de aceptar el procedimiento, apt
instalará Nginx y cualquier dependencia requerida en tu servidor.
Paso 2 – Ajuste del Firewall
Antes de probar Nginx, es necesario ajustar el software de firewall para permitir el acceso al servicio. Nginx se registra como un servicio con ufw
al momento de la instalación, lo que facilita permitir el acceso a Nginx.
Enumere las configuraciones de aplicaciones con las que ufw
sabe cómo trabajar escribiendo:
Debería obtener una lista de los perfiles de aplicación:
OutputAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Como se muestra en la salida, hay tres perfiles disponibles para Nginx:
- Nginx Full: Este perfil abre tanto el puerto 80 (tráfico web normal, no cifrado) como el puerto 443 (tráfico cifrado TLS/SSL)
- Nginx HTTP: Este perfil abre solo el puerto 80 (tráfico web normal, no cifrado)
- Nginx HTTPS: Este perfil abre solo el puerto 443 (tráfico cifrado TLS/SSL)
Se recomienda habilitar el perfil más restrictivo que aún permita el tráfico que ha configurado. Por ahora, solo necesitaremos permitir el tráfico en el puerto 80.
Puede habilitar esto escribiendo:
Puede verificar el cambio escribiendo:
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: Verificación de su Servidor Web
Al final del proceso de instalación, Ubuntu 20.04 inicia Nginx. El servidor web ya debería estar en funcionamiento.
Podemos verificar con el sistema de inicio systemd
para asegurarnos de que el servicio esté en ejecución escribiendo:
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 2020-04-20 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 confirmación de esta salida, el servicio se ha iniciado correctamente. Sin embargo, la mejor manera de probar esto es solicitar realmente una página de Nginx.
Puedes acceder a la página de inicio predeterminada de Nginx para confirmar que el software esté funcionando correctamente navegando a la dirección IP de tu servidor. Si no conoces la dirección IP de tu servidor, puedes encontrarla usando la herramienta icanhazip.com, que te dará tu dirección IP pública tal como se recibe desde otra ubicación en internet:
Cuando tengas la dirección IP de tu servidor, introdúcela en la barra de direcciones de tu navegador:
http://your_server_ip
Deberías recibir la página de inicio predeterminada de Nginx:
Si estás en esta página, tu servidor está funcionando correctamente y está listo para ser administrado.
Paso 4 – Administración del Proceso Nginx
Ahora que tienes tu servidor web funcionando, revisemos algunos comandos básicos de administración.
Para detener tu servidor web, escribe:
Para iniciar el servidor web cuando está detenido, escribe:
Para detener y luego iniciar nuevamente el servicio, escribe:
Si solo estás realizando cambios de configuración, Nginx a menudo puede recargarse sin desconectar conexiones. Para hacer esto, escribe:
De forma predeterminada, Nginx está configurado para iniciarse automáticamente cuando se arranca el servidor. Si esto no es lo que desea, puede deshabilitar este comportamiento escribiendo:
Para volver a habilitar el servicio para que se inicie en el arranque, puede escribir:
Ahora ha aprendido comandos básicos de gestión 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)
Cuando se utiliza el servidor web Nginx, los bloques de servidor (similares a los hosts virtuales en Apache) se pueden utilizar para encapsular detalles de configuración y alojar más de un dominio desde un único servidor. Configuraremos un dominio llamado su_dominio, pero debería reemplazar esto con su propio nombre de dominio.
Nginx en Ubuntu 20.04 tiene un bloque de servidor habilitado de forma predeterminada que está configurado para servir documentos desde un directorio en /var/www/html
. Si bien esto funciona bien para un solo sitio, puede volverse engorroso si está alojando varios sitios. En lugar de modificar /var/www/html
, creemos una estructura de directorio dentro de /var/www
para nuestro sitio su_dominio, dejando /var/www/html
en su lugar como el directorio predeterminado que se 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 bandera -p
para crear los directorios padres necesarios:
A continuación, asigna la propiedad del directorio con la variable de entorno $USER
:
Los permisos de tus raíces web deberían ser correctos si no has modificado el valor de tu umask
, que establece los permisos de archivo predeterminados. Para asegurarte de que tus permisos son correctos y permiten al propietario leer, escribir y ejecutar los archivos, mientras otorgan solo permisos de lectura y ejecución a grupos y otros, puedes ingresar el siguiente comando:
A continuación, crea una página de ejemplo index.html
usando nano
o tu editor favorito:
Dentro, agrega el siguiente HTML de ejemplo:
Guarda y cierra el archivo presionando Ctrl+X
para salir, luego cuando se te solicite guardar, presiona Y
y luego Enter
.
Para que Nginx sirva este contenido, es necesario crear un bloque de servidor con las directivas correctas. En lugar de modificar directamente el archivo de configuración predeterminado, hagamos uno nuevo en /etc/nginx/sites-available/tu_dominio
:
Pega el siguiente bloque de configuración, que es similar al predeterminado, pero actualizado para nuestro nuevo directorio y nombre de dominio:
Observa que hemos actualizado la configuración root
a nuestro nuevo directorio y el server_name
a nuestro nombre de dominio.
A continuación, habilitamos el archivo creando un enlace desde él al directorio sites-enabled
, que Nginx lee durante el inicio:
Nota: Nginx utiliza una práctica común llamada enlaces simbólicos, o symlinks, para hacer un seguimiento de qué bloques de servidor están habilitados. Crear un symlink es como crear un acceso directo en el disco, de modo que luego puedas eliminar el acceso directo del directorio sites-enabled
mientras mantienes el bloque de servidor en sites-available
si deseas habilitarlo.
Ahora están habilitados y configurados dos bloques de servidor para responder a solicitudes según sus directivas listen
y server_name
(puedes leer más sobre cómo Nginx procesa estas directivas aquí):
tu_dominio
: Responderá a solicitudes paratu_dominio
ywww.tu_dominio
.default
: Responderá a cualquier solicitud en el puerto 80 que no coincida con los otros dos bloques.
Para evitar un posible problema de memoria de cubo hash que puede surgir al agregar nombres de servidor adicionales, es necesario ajustar un solo valor en el archivo /etc/nginx/nginx.conf
. Abre el archivo:
Encuentra la directiva server_names_hash_bucket_size
y elimina el símbolo #
para descomentar la línea. Si estás usando nano, puedes buscar rápidamente palabras en el archivo presionando CTRL
y w
.
Nota: Comentar líneas de código, generalmente colocando #
al principio de una línea, es otra forma de desactivarlas sin necesidad de eliminarlas realmente. Muchos archivos de configuración se envían con múltiples opciones comentadas para que puedan activarse o desactivarse, alternando entre código activo y documentación.
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
Guarde y cierre el archivo cuando haya terminado.
A continuación, pruebe para asegurarse de que no haya errores de sintaxis en ninguno de sus archivos de Nginx:
Si no hay problemas, reinicie Nginx para habilitar sus cambios:
Ahora Nginx debería estar sirviendo su nombre de dominio. Puede probar esto navegando a http://su_nombre_de_dominio
, donde debería ver algo como esto:
Paso 6 – Familiarizarse con Archivos y Directorios Importantes de Nginx
Ahora que sabe cómo gestionar el servicio de Nginx en sí, debería tomar unos minutos para familiarizarse con algunos directorios y archivos importantes.
Contenido
/var/www/html
: El contenido web real, que por defecto solo consiste en la página predeterminada de Nginx que viste anteriormente, se sirve desde el directorio/var/www/html
. 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 residen aquí./etc/nginx/nginx.conf
: El archivo de configuración principal de Nginx. Esto se puede modificar para realizar cambios en la configuración global de Nginx./etc/nginx/sites-available/
: El directorio donde se pueden almacenar bloques de servidor por sitio. Nginx no utilizará los archivos de configuración que se encuentren en este directorio a menos que estén vinculados al directoriosites-enabled
. Típicamente, toda la configuración del bloque del servidor se realiza en este directorio, y luego se habilita vinculándola al otro directorio./etc/nginx/sites-enabled/
: El directorio donde se almacenan los bloques de servidor por sitio habilitados. Típicamente, estos se crean vinculando archivos de configuración encontrados en el directoriosites-available
./etc/nginx/snippets
: Este directorio contiene fragmentos de configuración que se pueden incluir en otros lugares de la configuración de Nginx. Los segmentos de configuración potencialmente repetibles son buenos candidatos para ser refactorizados en fragmentos.
Registros del servidor
/var/log/nginx/access.log
: Cada solicitud a tu 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 tienes tu servidor web instalado, tienes muchas opciones para el tipo de contenido que deseas servir y las tecnologías que deseas usar para crear una experiencia más rica.
Si deseas construir una pila de aplicaciones más completa, consulta el artículo Cómo instalar Linux, Nginx, MySQL, PHP (pila LEMP) en Ubuntu 20.04.
Para configurar HTTPS para tu nombre de dominio con un certificado SSL gratuito utilizando Let’s Encrypt, debes pasar al artículo Cómo asegurar Nginx con Let’s Encrypt en Ubuntu 20.04.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04