Skip to content

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.

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.

  1. 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
  2. Una vez que tu sistema esté actualizado, instala Nginx:

    Terminal window
    sudo dnf install nginx -y
  3. 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 nginx
    sudo systemctl enable nginx
  4. Confirma que Nginx se está ejecutando correctamente:

    Terminal window
    sudo systemctl status nginx

    Deberías ver Active: active (running) en la salida.

  5. 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=http
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --reload

    Si quieres permitir específicamente el acceso desde una IP o rango de IPs, puedes ajustar las reglas.

  6. 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

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.

  1. 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.conf

    Copia y pega el siguiente contenido, ajustando your_domain.com y la ruta root según sea necesario:

    /etc/nginx/conf.d/mywebsite.conf
    server {
    listen 80; # Escucha en el puerto 80 para tráfico HTTP
    listen [::]:80; # Escucha en IPv6
    server_name your_domain.com www.your_domain.com; # ¡Reemplaza con tu dominio!
    root /usr/share/nginx/html/mywebsite; # Directorio donde estarán tus archivos web
    index index.html index.htm; # Archivos de índice predeterminados
    # Configuración para servir archivos estáticos directamente
    location / {
    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 archivos index.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.
  2. Asegúrate de que el directorio root que especificaste exista y tenga los permisos correctos.

    Terminal window
    sudo mkdir -p /usr/share/nginx/html/mywebsite
    sudo chown -R nginx:nginx /usr/share/nginx/html/mywebsite
    sudo chmod -R 755 /usr/share/nginx/html/mywebsite

    Crea 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
  3. Siempre valida tu configuración antes de recargar Nginx para evitar errores.

    Terminal window
    sudo nginx -t

    Deberías ver syntax is ok y test is successful.

  4. Recarga Nginx para Aplicar los Cambios 🔄

    Section titled “Recarga Nginx para Aplicar los Cambios 🔄”
    Terminal window
    sudo systemctl reload nginx
  5. 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!“.


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.

  • 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/mywebsite

    Para 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
  • 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

Aquí hay algunas optimizaciones y configuraciones avanzadas que puedes considerar:

  • 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ías
    log_not_found off;
    }

    Esto se añadiría dentro de tu bloque server o en un location 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 server
    location /api/ {
    proxy_pass http://localhost:3000; # Dirección de tu aplicación
    proxy_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;
    }


¡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!