Introducción
Nginx es uno de los servidores web más populares en el mundo y es responsable de alojar algunos de los sitios más grandes y con mayor tráfico en Internet. Es una opción ligera que se puede utilizar tanto como servidor web como proxy inverso.
En esta guía, revisarás cómo instalar Nginx en tu servidor Rocky Linux 9, ajustar el firewall, gestionar el proceso de Nginx y configurar bloques de servidor para alojar más de un dominio desde un solo servidor.
Prerrequisitos
Antes de comenzar esta guía, debes tener configurado en tu servidor un usuario regular, no root, con privilegios sudo. Puedes aprender cómo configurar una cuenta de usuario regular siguiendo nuestra Guía de configuración inicial del servidor para Rocky Linux 9.
También querrás opcionalmente 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 no root para comenzar.
Paso 1 – Instalación de Nginx
Como Nginx está disponible en los repositorios predeterminados de Rocky, puedes instalarlo con un solo comando, utilizando el gestor de paquetes dnf
.
Instala el paquete nginx
con dnf install
:
- sudo dnf install nginx
Cuando se te solicite, ingresa y
para confirmar que deseas instalar nginx
. Después de eso, dnf
instalará Nginx y cualquier dependencia requerida en tu servidor.
Una vez finalizada la instalación, ejecuta los siguientes comandos para habilitar y iniciar el servidor web:
- sudo systemctl enable nginx
- sudo systemctl start nginx
Esto hará que Nginx se reinicie automáticamente cada vez que tu servidor se reinicie. Tu nuevo servidor web debería estar funcionando, pero antes de probarlo, probablemente necesitarás hacer un cambio en la configuración de tu firewall.
Paso 2 – Ajuste del Firewall
Si habilitaste el firewall firewalld
como parte de la guía de configuración inicial del servidor para Rocky Linux 9, deberás ajustar la configuración del firewall para permitir conexiones externas en tu servidor web Nginx, que se ejecuta en el puerto 80
de manera predeterminada.
Ejecute el siguiente comando para habilitar permanentemente las conexiones HTTP en el puerto 80
:
- sudo firewall-cmd --permanent --add-service=http
Para verificar que el servicio de firewall http
se agregó correctamente, puede ejecutar:
- sudo firewall-cmd --permanent --list-all
Verá una salida como esta:
Outputpublic
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Para aplicar los cambios, necesitará recargar el servicio de firewall:
- sudo firewall-cmd --reload
Su servidor web debería ser accesible para visitantes externos ahora.
Paso 3 – Verificación de su Servidor Web
En este punto, su servidor web debería estar activo y funcionando.
Puede utilizar el comando systemctl status
para asegurarse de que el servicio esté en ejecución:
- systemctl status nginx
Output● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-09-14 21:03:46 UTC; 7min ago
Process: 18384 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Process: 18385 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 18386 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Main PID: 18387 (nginx)
Tasks: 3 (limit: 10938)
Memory: 2.8M
CPU: 43ms
CGroup: /system.slice/nginx.service
├─18387 "nginx: master process /usr/sbin/nginx"
├─18388 "nginx: worker process"
└─18389 "nginx: worker process"
Como se confirma con esta salida, el servicio se ha iniciado correctamente. Sin embargo, la mejor manera de probar esto es solicitar realmente una página desde Nginx.
Puede 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 su servidor. Si no conoce la dirección IP de su servidor, puede encontrarla usando la herramienta icanhazip.com, la cual le proporcionará su dirección IP pública tal como la recibe desde 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 inicio predeterminada de Nginx:
Si está en esta página, su servidor está funcionando correctamente y está listo para ser gestionado.
Paso 4 – Gestión del Proceso de Nginx
Ahora que tienes tu servidor web funcionando, revisemos algunos comandos de gestión de servicios.
Para detener tu servidor web, utiliza systemctl stop
:
- sudo systemctl stop nginx
Para iniciar el servidor web cuando está detenido, utiliza systemctl start
:
- sudo systemctl start nginx
Para detener y luego iniciar el servicio nuevamente, utiliza systemctl restart
:
- sudo systemctl restart nginx
Si solo estás realizando cambios de configuración, Nginx a menudo puede recargar sin desconectar conexiones. Para hacer esto, utiliza systemctl reload
:
- sudo systemctl reload nginx
Anteriormente en este tutorial, configuraste Nginx para que se inicie automáticamente cuando se inicia el servidor. Puedes deshabilitar este comportamiento utilizando systemctl disable
:
- sudo systemctl disable nginx
Para volver a habilitar el servicio para que se inicie en el arranque, puedes escribir:
- sudo systemctl enable nginx
Paso 5 – Familiarizándote con Archivos y Directorios Importantes de Nginx
Ahora que sabes cómo gestionar el servicio de Nginx, deberías dedicar unos minutos a familiarizarte con algunos directorios y archivos importantes.
Contenido
/usr/share/nginx/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/usr/share/nginx/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 residen aquí./etc/nginx/nginx.conf
: Archivo principal de configuración de Nginx. Se puede modificar para realizar cambios en la configuración global de Nginx./etc/nginx/conf.d/
: Este directorio contiene archivos de configuración de bloques de servidor, donde puedes definir los sitios web que se alojan en Nginx. Un enfoque típico es tener cada sitio web en un archivo separado que lleva el nombre del dominio del sitio, comotu_dominio.conf
.
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 de otra manera./var/log/nginx/error.log
: Cualquier error de Nginx se registrará en este registro.
Ahora deberías estar listo para configurar el sitio para alojar uno o más dominios.
Paso 6: Configuración de Bloques de Servidor (Opcional)
Al utilizar el servidor web Nginx, los bloques de servidor (similares a los hosts virtuales en Apache) se pueden utilizar para organizar detalles de configuración y alojar más de un dominio desde un solo servidor. En Rocky Linux 9, los bloques de servidor se definen en archivos .conf
ubicados en /etc/nginx/conf.d
. Configuraremos un dominio llamado your_domain
, pero debes reemplazar esto con tu propio nombre de dominio.
Por defecto, Nginx en Rocky Linux 9 está configurado para servir documentos desde un directorio en /usr/share/nginx/html
. Si bien esto funciona bien para un solo sitio, puede volverse inmanejable si estás alojando varios sitios. En lugar de modificar /usr/share/nginx/html
, crearás una estructura de directorios dentro de /var/www
para el sitio web your_domain, dejando /usr/share/nginx/html
en su lugar como el directorio predeterminado que se servirá si una solicitud de cliente no coincide con ningún otro sitio.
Crea el directorio para your_domain de la siguiente manera, utilizando la bandera -p
para crear cualquier directorio padre necesario:
- sudo mkdir -p /var/www/your_domain/html
A continuación, asigna la propiedad del directorio con la variable de entorno $USER
, que debe hacer referencia a tu usuario actual del sistema:
- sudo chown -R $USER:$USER /var/www/your_domain/html
Ahora crearás una página de ejemplo index.html
para probar la configuración del bloque del servidor. El editor de texto predeterminado que viene con Rocky Linux 9 es vi
. vi
es un editor de texto extremadamente potente, pero puede ser algo obtuso para los usuarios que no tienen experiencia con él. Es posible que desees instalar un editor más fácil de usar como nano
para facilitar la edición de archivos de configuración en tu servidor Rocky Linux 9:
- sudo dnf install nano
A continuación, crea una página de ejemplo index.html
utilizando nano
o tu editor favorito:
- nano /var/www/your_domain/html/index.html
Dentro, añade el siguiente HTML de ejemplo:
<html>
<head>
<title>Welcome to your_domain</title>
</head>
<body>
<h1>Success! Your Nginx server is successfully configured for <em>your_domain</em>. </h1>
<p>This is a sample page.</p>
</body>
</html>
Guarda y cierra el archivo cuando hayas terminado. Si estás utilizando nano
, puedes guardar y salir presionando CTRL + X
, luego cuando se te solicite, Y
y luego Enter.
Para que Nginx sirva este contenido, necesitarás crear un bloque de servidor con directivas que apunten a tu directorio web personalizado. Crea un nuevo bloque de servidor en /etc/nginx/conf.d/tu_dominio.conf
:
- sudo nano /etc/nginx/conf.d/your_domain.conf
Pega el siguiente bloque de configuración:
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;
}
}
Observa que hemos actualizado la configuración de root
a nuestro nuevo directorio, y el server_name
a nuestro nombre de dominio. Guarda y cierra el archivo.
Dos bloques de servidor ahora están habilitados y configurados para responder a las solicitudes basadas en sus directivas listen
y server_name
(puedes leer más sobre cómo Nginx procesa estas directivas aquí):
tu_dominio
: Responderá a las solicitudes paratu_dominio
ywww.tu_dominio
.default
: Responderá a cualquier solicitud en el puerto 80 que no coincida con los otros dos bloques.
A continuación, prueba para asegurarte de que no haya errores de sintaxis en ninguno de tus archivos de Nginx, usando nginx -t
:
- sudo nginx -t
Si no hay ningún problema, reinicia Nginx para habilitar tus cambios:
- sudo systemctl restart nginx
Antes de poder probar los cambios desde tu navegador, deberás actualizar los contextos de seguridad SELinux de tu servidor para que Nginx tenga permitido servir contenido desde el directorio /var/www/tu_dominio
.
Esta actualización de contexto chcon
permitirá que tu raíz de documento personalizada se sirva como contenido HTTP:
- chcon -vR system_u:object_r:httpd_sys_content_t:s0 /var/www/your_domain/
Ahora Nginx debería estar sirviendo el nombre de tu dominio. Puedes probar esto navegando a http://tu_dominio
, donde deberías ver algo así:
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 utilizar para crear una experiencia más rica.
Para configurar HTTPS para el nombre de tu dominio con un certificado SSL gratuito utilizando Let’s Encrypt, debes continuar con Cómo asegurar Nginx con Let’s Encrypt en Rocky Linux 9.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-rocky-linux-9