Nginx - el reverse proxy por excelencia
Aprende sobre nginx, un proyecto opensource de gran alcance que se utiliza para gestionar tus servicios y servidores de manera pública en la web.
Síguenos con el tutorial
Section titled “Síguenos con el tutorial”- En QuéPasalinux MySQL - Introducción a MySQL con Docker un vídeo práctico sobre MySQL y Docker
Volver a Página Principal
Ver Codigo en GitLab
🚀 Guía de Instalación y Configuración de Nginx en Fedora Server ✨
Section titled “🚀 Guía de Instalación y Configuración de Nginx en Fedora Server ✨”¡Hola! 👋 ¿Listo para montar un servidor web potente y eficiente en tu Fedora Server? Nginx (pronunciado “Engine-X”) es un servidor web y proxy inverso muy popular, conocido por su alto rendimiento, estabilidad y bajo consumo de recursos. Es perfecto para servir sitios web estáticos, actuar como proxy para aplicaciones dinámicas o balancear la carga de tráfico.
En esta guía, te llevaré paso a paso por la instalación y configuración básica de Nginx en Fedora Server. ¡Vamos a optimizar tu servidor! 🚀
1. 🛠️ Instalación de Nginx en Fedora Server
Section titled “1. 🛠️ Instalación de Nginx en Fedora Server”La instalación de Nginx en Fedora es directa, ya que está disponible en los repositorios oficiales de DNF.
-
Actualiza tu Sistema ⬆️
Section titled “Actualiza tu Sistema ⬆️”Siempre es una buena práctica asegurarte de que tu sistema esté al día antes de instalar nuevos paquetes.
Terminal window sudo dnf update -y -
Instala Nginx 📦
Section titled “Instala Nginx 📦”Una vez que tu sistema esté actualizado, instala Nginx:
Terminal window sudo dnf install nginx -y -
Inicia y Habilita Nginx 🚀
Section titled “Inicia y Habilita Nginx 🚀”Después de la instalación, inicia el servicio Nginx y habilítalo para que se inicie automáticamente cada vez que el servidor arranque.
Terminal window sudo systemctl start nginxsudo systemctl enable nginx -
Verifica el Estado del Servicio ✅
Section titled “Verifica el Estado del Servicio ✅”Confirma que Nginx se está ejecutando correctamente:
Terminal window sudo systemctl status nginxDeberías ver
Active: active (running)
en la salida. -
Abre los Puertos del Firewall 🔥
Section titled “Abre los Puertos del Firewall 🔥”Fedora usa
firewalld
por defecto. Necesitas abrir los puertos HTTP (80) y HTTPS (443) para permitir el tráfico web.Terminal window sudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --reloadSi quieres permitir específicamente el acceso desde una IP o rango de IPs, puedes ajustar las reglas.
-
Verifica la Instalación 🌐
Section titled “Verifica la Instalación 🌐”Abre tu navegador web y navega a la dirección IP de tu Fedora Server (o
localhost
si lo haces desde el propio servidor). Deberías ver la página de bienvenida predeterminada de Nginx de Fedora.http://your_server_ip_address
2. ⚙️ Configuración Básica de Nginx
Section titled “2. ⚙️ Configuración Básica de Nginx”Los archivos de configuración de Nginx se encuentran en el directorio /etc/nginx/
.
nginx.conf
: El archivo de configuración principal.conf.d/
: Directorio para archivos de configuración de sitios individuales (recomendado).default.d/
: Directorio para configuraciones predeterminadas (común en Fedora).
2.1. Creando tu Primer Bloque de Servidor (Virtual Host) 📝
Section titled “2.1. Creando tu Primer Bloque de Servidor (Virtual Host) 📝”Es una buena práctica crear un archivo de configuración separado para cada sitio web o aplicación que sirvas. Esto hace que la gestión sea más limpia.
-
Crea un Nuevo Archivo de Configuración 📄
Section titled “Crea un Nuevo Archivo de Configuración 📄”Vamos a crear un bloque de servidor para un sitio web de ejemplo. En Fedora, es común usar el directorio
/etc/nginx/conf.d/
.Terminal window sudo nano /etc/nginx/conf.d/mywebsite.confCopia y pega el siguiente contenido, ajustando
your_domain.com
y la rutaroot
según sea necesario:/etc/nginx/conf.d/mywebsite.conf server {listen 80; # Escucha en el puerto 80 para tráfico HTTPlisten [::]:80; # Escucha en IPv6server_name your_domain.com www.your_domain.com; # ¡Reemplaza con tu dominio!root /usr/share/nginx/html/mywebsite; # Directorio donde estarán tus archivos webindex index.html index.htm; # Archivos de índice predeterminados# Configuración para servir archivos estáticos directamentelocation / {try_files $uri $uri/ =404;}# Manejo de errores (opcional)error_page 404 /404.html;location = /404.html {internal;}error_page 500 502 503 504 /50x.html;location = /50x.html {internal;}}listen 80;
: Nginx escuchará las conexiones entrantes en el puerto HTTP estándar (80).server_name your_domain.com www.your_domain.com;
: Define los dominios para los que este bloque de servidor responderá. ¡Cámbialo a tu propio dominio o IP si no tienes uno!root /usr/share/nginx/html/mywebsite;
: Esta es la ruta base donde Nginx buscará los archivos de tu sitio web. Crea este directorio y coloca tus archivosindex.html
allí.index index.html index.htm;
: Especifica qué archivos Nginx debe buscar cuando una solicitud es para un directorio.location / { ... }
: Define cómo Nginx maneja las solicitudes para la ruta raíz (/
).try_files
intenta servir el archivo solicitado, luego el directorio con el mismo nombre, y si nada se encuentra, devuelve un error 404.
-
Crea el Directorio Raíz de tu Sitio 📁
Section titled “Crea el Directorio Raíz de tu Sitio 📁”Asegúrate de que el directorio
root
que especificaste exista y tenga los permisos correctos.Terminal window sudo mkdir -p /usr/share/nginx/html/mywebsitesudo chown -R nginx:nginx /usr/share/nginx/html/mywebsitesudo chmod -R 755 /usr/share/nginx/html/mywebsiteCrea un archivo
index.html
de prueba dentro de este directorio:Terminal window echo "<h1>¡Hola desde Nginx en Fedora Server!</h1>" | sudo tee /usr/share/nginx/html/mywebsite/index.html -
Verifica la Sintaxis de Nginx ✔️
Section titled “Verifica la Sintaxis de Nginx ✔️”Siempre valida tu configuración antes de recargar Nginx para evitar errores.
Terminal window sudo nginx -tDeberías ver
syntax is ok
ytest is successful
. -
Recarga Nginx para Aplicar los Cambios 🔄
Section titled “Recarga Nginx para Aplicar los Cambios 🔄”Terminal window sudo systemctl reload nginx -
Prueba tu Nuevo Sitio 🌐
Section titled “Prueba tu Nuevo Sitio 🌐”Ahora, navega a
http://your_domain.com
(o la IP de tu servidor si no usas un dominio) en tu navegador. Deberías ver el mensaje “¡Hola desde Nginx en Fedora Server!“.
3. 🛡️ Consideraciones de SELinux
Section titled “3. 🛡️ Consideraciones de SELinux”Fedora Server utiliza SELinux para la seguridad. Si te encuentras con problemas al servir archivos (ej: errores 403 Forbidden), es muy probable que sea un problema de SELinux.
-
Contextos de Archivos 🏷️
Section titled “Contextos de Archivos 🏷️”Asegúrate de que los archivos web tengan el contexto de seguridad correcto para Nginx (
httpd_sys_content_t
).Terminal window sudo chcon -R -t httpd_sys_content_t /usr/share/nginx/html/mywebsitePara que este cambio sea persistente (después de un reinicio o si reinstalas algo):
Terminal window sudo semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html/mywebsite(/.*)?"sudo restorecon -Rv /usr/share/nginx/html/mywebsite -
Puertos y Booleans de SELinux 🔓
Section titled “Puertos y Booleans de SELinux 🔓”Si Nginx necesita conectarse a la red para acceder a contenido (ej: un proxy inverso), o si lo ejecutas en un puerto no estándar, podrías necesitar ajustar los booleans de SELinux.
- Para permitir que Nginx se conecte a la red (si actúas como proxy inverso):
Terminal window sudo setsebool -P httpd_can_network_connect on - Para listar los booleans relacionados con httpd (Nginx usa los mismos contextos):
Terminal window sudo getsebool -a | grep httpd
- Para permitir que Nginx se conecte a la red (si actúas como proxy inverso):
4. 📈 Optimizaciones Comunes (Opcional)
Section titled “4. 📈 Optimizaciones Comunes (Opcional)”Aquí hay algunas optimizaciones y configuraciones avanzadas que puedes considerar:
-
Gzip Compression (Compresión) 💨
Section titled “Gzip Compression (Compresión) 💨”Habilita la compresión Gzip para reducir el tamaño de los archivos antes de enviarlos al cliente, lo que acelera la carga de la página. Puedes añadir esto dentro del bloque
http
en/etc/nginx/nginx.conf
o en tu archivo de sitio:gzip on;gzip_vary on;gzip_proxied any;gzip_comp_level 6;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; -
Caching de Archivos Estáticos (Manejo de Caché) ⚡
Section titled “Caching de Archivos Estáticos (Manejo de Caché) ⚡”Configura el almacenamiento en caché del navegador para los archivos estáticos.
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {expires 30d; # Cachea los archivos por 30 díaslog_not_found off;}Esto se añadiría dentro de tu bloque
server
o en unlocation
más específico. -
Configuración de Proxy Inverso (Reverse Proxy) 🔄
Section titled “Configuración de Proxy Inverso (Reverse Proxy) 🔄”Si estás sirviendo una aplicación que corre en otro puerto (ej: Node.js en 3000, Python en 8000), Nginx puede actuar como proxy inverso.
# Dentro de tu bloque serverlocation /api/ {proxy_pass http://localhost:3000; # Dirección de tu aplicaciónproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
📚 Referencias y Recursos Adicionales
Section titled “📚 Referencias y Recursos Adicionales”- Documentación Oficial de Nginx: nginx.org/en/docs
- Guía de Nginx en DigitalOcean: digitalocean.com/community/tutorials/how-to-install-nginx-on-fedora-36 (adapta la versión de Fedora)
- Documentación de firewalld: firewalld.org/documentation/
- Documentación de SELinux para Nginx: https://access.redhat.com/documentation/es-es/red_hat_enterprise_linux/9/html/using_selinux/configuring-selinux-for-web-servers_using-selinux (aunque es para RHEL, muchos principios se aplican a Fedora)
¡Felicidades! 🎉 Has instalado y configurado Nginx en tu Fedora Server. Ahora tienes una base sólida para servir tus sitios web y aplicaciones. ¡Experimenta con las configuraciones y sigue explorando el vasto mundo de Nginx!