Introducción
Nginx es uno de los servidores web más populares del mundo, responsable de alojar algunos de los sitios web más grandes y visitados de internet. Es una opción ligera que puede usarse como servidor web o proxy inverso.
En esta guía, analizaremos la instalación de Nginx en un servidor Ubuntu 20.04, la configuración de un firewall, la administración del proceso Nginx y la configuración de bloques de servidor para alojar más de un dominio desde un solo servidor.
Requisitos previos
- Antes de comenzar esta guía, debe tener un usuario regular, no root, con privilegios sudo configurados en su servidor.
- Para comprar un servidor Ubuntu Hacer clic Hazlo.
Paso 1 – Instalar Nginx
Dado que Nginx está disponible en los repositorios predeterminados de Ubuntu, se puede instalar 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 directorio de paquetes local para tener acceso a las listas de paquetes más recientes. Después, podemos instalar nginx:
sudo apt update
sudo apt install nginxDespués de aceptar el procedimiento, apt instalará Nginx y cualquier dependencia requerida en su servidor.
Paso 2 – Configurar el firewall
Antes de probar Nginx, se debe configurar el firewall para permitir el acceso al servicio. Tras la instalación, Nginx se registra como servicio en ufw, lo que facilita el acceso.
Enumere las configuraciones de la aplicación con las que ufw sabe trabajar escribiendo:
sudo ufw app list
Debería obtener una lista de perfiles de aplicación:
Output
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHComo se muestra en la salida, hay tres perfiles para Nginx:
- Nginx completo: Este perfil abre tanto el puerto 80 (tráfico web normal, sin cifrar) como el puerto 443 (tráfico cifrado TLS/SSL).
- HTTP de Nginx: Este perfil solo abre el puerto 80 (tráfico web normal, sin cifrar)
- HTTPS de Nginx: 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'
Puede confirmar este cambio escribiendo:
sudo ufw status
La salida muestra qué tráfico HTTP está permitido:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)Paso 3 – Verifique su servidor web
Al finalizar la instalación, Ubuntu 20.04 iniciará Nginx. El servidor web ya debería estar iniciado.
Podemos hacer esto 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 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 processComo se confirmó en este caso, el servicio se inició correctamente. Sin embargo, la mejor manera de probarlo es solicitar una página a Nginx.
Puede acceder a la página de destino predeterminada de Nginx navegando a la dirección IP de su servidor para verificar que el software funciona correctamente. 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 recibiría de otro lugar en internet:
curl -4 icanhazip.com
Una vez que tenga la dirección IP de su servidor, ingrésela en la barra de direcciones de su navegador:
http://your_server_ipDebería obtener la página de destino predeterminada de Nginx:
Si está en esta página, su servidor está funcionando correctamente y listo para ser administrado.
Paso 4: Administrar el proceso Nginx
Ahora que tiene configurado su servidor web, repasemos algunos comandos administrativos básicos.
Para detener su servidor web, escriba:
sudo systemctl stop nginx
Para iniciar el servidor web si se detiene, escriba:
sudo systemctl start nginx
Para detener y luego reiniciar el servicio, escriba:
sudo systemctl restart nginx
Si solo realiza cambios de configuración, Nginx suele poder recargarse sin interrumpir las 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 administrativos básicos y debería estar listo para configurar su sitio para alojar más de un dominio.
Paso 5 – Configurar 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 con su propio nombre de dominio.
Nginx en Ubuntu 20.04 tiene un bloque de servidor habilitado por defecto, configurado para servir documentos fuera de un directorio en /var/www/html. Si bien esto funciona bien para un solo sitio, puede resultar engorroso si se alojan varios. En lugar de cambiar /var/www/html, crearemos una estructura de directorios en /var/www para nuestro sitio your_domain y dejaremos /var/www/html como el directorio predeterminado para servir documentos en caso de que no coincida con la solicitud del cliente. Otros sitios
Cree un directorio para su_dominio de la siguiente manera, utilizando el indicador -p para crear cualquier directorio principal necesario:
sudo mkdir -p /var/www/your_domain/html
A continuación, asigne la propiedad del directorio con la variable de entorno $USER:
sudo chown -R $USER:$USER /var/www/your_domain/html
Si no ha cambiado el valor de umask, que establece los permisos de archivo predeterminados, sus permisos de usuario raíz web deberían ser correctos. Para garantizar que sus permisos sean correctos y permitan al propietario leer, escribir y ejecutar archivos, y solo conceder permisos de lectura y ejecución a grupos y otros usuarios, puede introducir el siguiente comando:
sudo chmod -R 755 /var/www/your_domain
A continuación, crea una página index.html de muestra usando nano o tu editor favorito:
sudo nano /var/www/your_domain/html/index.html
Dentro, agregue el siguiente ejemplo 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 presione Y y luego Enter cuando se le solicite para guardar.
Para que Nginx muestre este contenido, necesita crear un bloque de servidor con las instrucciones correctas. En lugar de modificar directamente el archivo de configuración predeterminado, creemos un nuevo archivo 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:
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 configuración raíz a nuestro nuevo directorio y el server_name a nuestro nombre de dominio.
A continuación, habilitemos el archivo creando un enlace desde él al directorio sites-enabled, que Nginx leerá cuando se inicie:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
Ahora dos bloques de servidor están habilitados y configurados para responder a las solicitudes según las directivas listen y server_name (puede leer más sobre cómo Nginx procesa estas directivas aquí):
- tu_dominio: Responde a las solicitudes de your_domain y www.your_domain.
- Por defecto: Responde a cualquier solicitud en el puerto 80 que no coincida con los otros dos bloques.
Para evitar el posible problema de memoria del contenedor hash que puede surgir al agregar nombres de servidor adicionales, es necesario establecer un único valor en el archivo /etc/nginx/nginx.conf. Abra el archivo:
sudo nano /etc/nginx/nginx.conf
Busque el comando server_names_hash_bucket_size y elimine el símbolo # para descomentar la línea. Si usa nano, puede buscar rápidamente palabras en el archivo presionando CTRL y w.
...
http {
...
server_names_hash_bucket_size 64;
...
}
...Guarda y cierra el archivo cuando hayas 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 problemas, reinicie Nginx para que los cambios surtan efecto:
sudo systemctl restart nginx
Nginx debería ahora servir tu nombre de dominio. Puedes comprobarlo accediendo a http://your_domain, donde deberías ver algo como esto:
Paso 6: Familiarícese 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 real, que por defecto consiste únicamente en la página predeterminada de Nginx que vio anteriormente, se publica fuera del directorio /var/www/html. Esto se puede cambiar modificando los archivos de configuración de Nginx.
Configuración del servidor
- /etc/nginx: 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 modificar la configuración global de Nginx.
- /etc/nginx/sitios-disponibles/: Un directorio donde se almacenan los bloques de servidor de cada sitio. Nginx no usará los archivos de configuración de este directorio a menos que estén vinculados al directorio de sitios habilitados. Normalmente, toda la configuración de los bloques de servidor se realiza en este directorio y luego se habilita mediante un enlace a otro directorio.
- /etc/nginx/sites-enabled/: El directorio donde se almacenan los bloques de servidor activos de cada sitio. Normalmente, se crean mediante enlaces a los archivos de configuración del directorio del sitio existente.
- /etc/nginx/snippets: Este directorio contiene fragmentos de configuración que pueden incluirse en otras partes de la configuración de Nginx. Las secciones de configuración potencialmente repetibles son buenas candidatas para la refactorización en fragmentos.
Informes 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 de otra manera.
- /var/log/nginx/error.log: Cualquier error de Nginx se registra en este registro.
Resultado
Ahora que tiene su servidor web instalado, tiene muchas opciones para el tipo de contenido y tecnologías que desea utilizar para crear una experiencia más rica.











