🐋
Apuntes Sistemas
  • ⚓Presentación
  • 📊Sistemas y Servidores
    • Personalizar el prompt de Windows
    • Utilidad de manejo de apps para Windows
    • PRACTICA: Arranque dual Windows y Ubuntu
    • 🚧SysLinuxOS: el SO para ASIX
    • Comandos Linux
      • PRACTICA - Ejercicio de práctica comandos
      • 🚧Instalación de paquetes
      • Apuntes Linux: blue/red team
      • Ejemplos de bash
      • Listado de comandos de Linux
    • Comandos Windows
      • 🚧Apuntes Powershell
      • Bucles FOR con batch
      • Scripts de práctica de Windows
    • Prácticas con Windows 10
    • Configuración de netplan
    • Terminal shell
      • SSH
      • 🚧Ghostty
      • 🚧Warp: la terminal inteligente
      • tmux: paneles de terminal
      • Tabby: Mejorar terminal
      • Conexión SSH en red NAT con VirtualBox
      • TheFuck!: Corrección de comandos
      • Wave: Mejorar terminal Linux
      • 🚧Registros de sesiones
    • Instalación manual de Wordpress en CDMON
    • 🏗️Proxmox
    • 🚧TrueNAS
    • Docker
      • Instalación de Docker
      • Dockerfiles
      • Volúmenes de docker
      • Deployment web con Docker con ejemplos
        • 🚧PRACTICA: Node.js con docker
      • Docker Compose
        • Ejemplo 1: Implantación de Wordpress
        • Ejemplo 2: Implementación de servidor con Nginx, Flask y mySQL
        • Ejemplo 3: Implantación de onlyoffice
        • 🚧Ejemplo 4: Passbolt
        • 🚧PRACTICA: Creando una web de emulación de juegos con docker-compose
      • Monitorización con Grafana en Docker
      • Pi-hole con docker
      • Actividad clase: Deployment app
      • Proyectos self-hosted de docker
    • 🚧Ansible
      • Configuración de laboratorio de ansible
    • 🚧Monitorización de servicios y redes
      • Servicios y cronjobs
      • 1Panel
      • 🚧WatchYourLAN
      • 🚧Uptime-kuma
      • 🚧Netdata
      • 🚧Prometheus + Grafana + Loki
    • LDAP
      • 🚧Gestión gráfica de LDAP
      • Carpetas compartidas NFS
      • PRACTICA: Infraestructura LDAP
  • 🗃️Servicios
    • 🚧Servidor hosting público
    • DHCP
      • DHCP con Ubuntu
      • 🦖DHCP & DNS script
      • DHCP con Alpine
        • Alpine - configuración de red
    • DNS
      • 😡Comprobación DNS
      • Script para enumeración DNS
      • DNS con ubuntu server
      • 🏗️DNSmasq
      • 🚧Securizar servidor DNS
    • Web
      • IIS con Windows server
      • Apache
        • Instalación de LAMP en Ubuntu
          • Prueba de servidor LAMP
          • 🚧Configuración de seguridad de Ubuntu
          • Creación de un VirtualHost en LAMP
          • Creación de varios VirtualHosts en LAMP
          • 🚧Instalación por script de LAMP
        • Aplicaciones con LAMP
          • Instalación de WP en entorno LAMP
          • 🚧Instalación de MantisBT en LAMP
            • 👷Guía de MantisBT
          • 🚧Instalación de QDPM con LAMP
      • Nginx
        • Virtualhosts
        • Instalando Wordpress en nginx
      • 👷MEAN stack
      • 👷‍♂️Caddy
      • 🚧Plesk
      • 🚧Ajenti -Web interface
    • 🏗️Proxy
      • Nginx como proxy inverso y balanceador
      • 🚧Zoraxy
    • Mailing
      • 🚧Servidor Mail con cloudfare
      • 🚧Reenvío de correos de root
      • 🚧Roundcube como MUA
      • Comprobación ESMTP
      • 🚧Seguridad en mailing
      • 🚧Mailhog
    • 🏗️File transfer
      • 🚧FTP
      • Git
    • Sistemas de comunicación instantánea
      • Comunicación mediante CLI
      • Ejabberd - XMPP
        • 🚧Ejabberd con docker
      • 🚧Openfire - XMPP
      • 🚧Comunicaciones servidor-móvil
    • 🏗️Multimedia services
      • Stremio
      • Ver anime por CLI
      • Jellyfin
      • 🚧HLS sobre Apache
      • 🚧Servicio autohospedado de videoconferencia
      • 🚧Morphos: Conversor docs
      • 🚧Reproductores de música en CLI
      • 🚧Icecast - música en streaming
      • 🚧RTMP-HLS server
      • 🚧Guacamole
  • 🖱️Hardware
    • 🚧Identificando conectores
    • Curso de electrónica analógica
    • Alcanzar los 3200MHz con la RAM
    • Calculadora de cuellos de botella
    • 🚧PXE: Bootear sistemas en red
    • 🚧PRÁCTICA - Clonación de disco con Clonezilla
    • Logitech iFixit
  • 🕸️Redes
    • Apuntes IPv4 Alina
    • ¿Cómo diferenciar tantos elementos de red?
    • 🚧IPv6
    • PRÁCTICA - Subneteo con IPcalc en Linux
    • PRÁCTICA - Comandos de red en Windows
    • 🚧PRÁCTICA - Comandos de red en Linux
    • Herramientas de red
      • 🚧TCPDump: analizado de paquetes en red
      • PRÁCTICA - Netsh
      • 🚧PRÁCTICA - mtr.ping.pe
      • 🚧Netcat
    • Wireshark
    • VPN y escritorio remoto
      • Comunicación punto a punto con ngrok
      • 🚧VPN
    • Escaneo de red
      • PRÁCTICA - Mapeado de red con Draw.io
      • 🚧PRÁCTICA - Nmap/Zenmap
    • Redes inalámbricas
      • Wi-fi
        • 🚧PRÁCTICA - Configuración de router
        • 🚧PRÁCTICA - Como hacer un Wifi Heatmap
        • 🚧Seguridad de redes inalámbricas
        • PRÁCTICA - Crackear la contraseña del Wifi con WPA/WPA2
    • PRÁCTICA - Usar SSH en Cisco packet tracer
  • 🛑Ciberseguridad
    • 🚧Securizando un servidor Linux
      • Protégete de ataques de fuerza bruta con Fail2ban
      • Firewall
        • UFW (uncomplicated firewall)
          • GUFW - Interfaz gráfica de ufw
        • 🚧IPTables
        • 🚧PFsense
          • 🚧DMZ con PFsense
      • 🚧Passbolt: gestor de contraseñas autohospedado
      • 🚧Hashes y encriptación
      • 🚧Certificados SSL/TLS
      • Copias de seguridad
    • 🚧Alerta de escaneo de puertos
    • 🚧Google dorks
    • 🚧Enumeración DNS
    • Comandos destructivos de linux
    • Webs enseñanza cyber
    • Wireless Pentesting CheatSheet Github
    • The password game!
    • Personal Security Checklist
  • 🔌Arduino
    • Termómetro e higrómetros digitales y online con Arduino
    • Construyendo un coche multipropósito
      • Multi
      • Montaje del auto
    • Arduino con Sigfox para IoT
    • 10 proyectos de Arduino
  • 📚Recursos y libros
    • Media library: libros varios
    • Herramientas básicas de sysadmin
  • 🌍Sostenibilidad y digitalización
    • Portfolio curso digitalización MOOC
    • 🚧Explotación de recursos por IA
    • 🚧Nuevas tecnologias y comunicaciones
    • 🚧Enlaces sobre Inteligencia artificial
Con tecnología de GitBook
En esta página
  • Pasos para Configurar el Proxy Inverso
  • Pasos para Configurar el Balanceo de Carga
  • Round Robin
  • NGINX proxy manager
  1. Servicios
  2. Proxy

Nginx como proxy inverso y balanceador

Nginx ha demostrado ser una solución integral para muchos servicios utiles de servidores e infraestructura TIC. En esta ocasión nos centraremos en dos, proxy inverso y balanceador de carga:

Un proxy inverso es un servidor que actúa como intermediario entre los clientes y los servidores de backend, ocultando la infraestructura interna del servidor y gestionando las solicitudes de los clientes antes de enviarlas al servidor adecuado. Sus funciones principales incluyen:

  • Seguridad: Oculta la IP del servidor backend y puede manejar SSL/TLS.

  • Cacheo: Almacena contenido estático para mejorar el rendimiento.

  • Redirección: Reenvía solicitudes a diferentes servidores según la configuración.

Un balanceador de carga es un sistema que distribuye las solicitudes entrantes de manera equilibrada entre múltiples servidores de backend para mejorar el rendimiento, la disponibilidad y la tolerancia a fallos.


Pasos para Configurar el Proxy Inverso

  1. Pre-requisitos:

    • Instalar y ejecutar un servidor backend simple.

      • Por ejemplo, si usas Python con Flask:

        pip install flask

        Si no tienes instalado pip o python puedes hacerlo con sudo apt install python3-pip

      • Luego crea un archivo llamado app.py con la IP de tu servidor y el puerto deseado:

        from flask import Flask
        app = Flask(__name__)
        
        @app.route("/")
        def hello():
            return "Respuesta del servidor backend"
        
        if __name__ == "__main__":
            app.run(host="10.0.0.5", port=5000)

        Ejecuta el servidor:

        python3 app.py
      • Para más comodidad, puedes lanzar la aplicación como un proceso en segundo plano añadiendo & al final, veamos el proceso:

python3 app.py & #Envia el proceso a segundo plano
bg #Vuelve al shell
jobs o ps#Lista los trabajos en segundo plano
fg %1 #Recupera en primer plano el trabajo [1]
kill %1 #Mata el proceso 1
  • Ahora el servidor estará escuchando en http://10.0.0.5:5000, puedes comprobarlo a través de un equipo cliente.

  1. Configura Nginx como Proxy Inverso:

  • Ahora toca configurar l proxy como si fuera un host normal, crea y edita el archivo de configuración del sitio web (por ejemplo, /etc/nginx/sites-available/proxy):

    server {
        listen 80;
        server_name localhost;
    
        location /api {
            proxy_pass http://10.0.0.5:5000; # Dirección del backend
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
  • Explicación:

    • proxy_pass: Redirige las peticiones a la URL del backend.

    • proxy_set_header: Transfiere encabezados adicionales para que el backend tenga información del cliente original.

  1. Habilita la configuración:

  • Crea un enlace simbólico para habilitar el sitio:

    sudo ln -s /etc/nginx/sites-available/proxy /etc/nginx/sites-enabled/
  • Recarga o reinicia Nginx:

    sudo systemctl reload nginx
  1. Prueba la configuración:

  • Envía una petición al proxy inverso:

    curl http://localhost
  • Deberías recibir la respuesta del backend: "Respuesta del servidor backend".


Pasos para Configurar el Balanceo de Carga

Round Robin

En este caso crearemos un balanceador que seguirá un esquema de Round Robin por defecto, este es un algoritmo de balanceo de carga utilizado en entornos de redes y servidores para distribuir las solicitudes o tareas entre un conjunto de recursos. La idea básica detrás del algoritmo es bastante simple: asigna cada solicitud o tarea al siguiente recurso disponible en una lista circular.

En este enfoque, las solicitudes se distribuyen secuencialmente a través de la lista y cada servidor recibe una solicitud en secuencia, independientemente de su carga actual. Este método es simple pero no tiene en cuenta la carga actual de cada servidor.

Para ponerlo en práctica realizaremos algo muy simple:

  1. Pre-requisitos:

    • Ejecutamos dos instancias del servidor backend en diferentes puertos tal y como hemos visto anteriormente cambiándoles el puerto:

      • Por ejemplo, utilizando Flask:

        • En el puerto 5000:

          from flask import Flask
          app = Flask(__name__)
          
          @app.route("/")
          def hello():
              return "Respuesta del servidor 1"
          
          if __name__ == "__main__":
              app.run(host="10.0.0.5", port=5000)
        • En el puerto 5001:

          from flask import Flask
          app = Flask(__name__)
          
          @app.route("/")
          def hello():
              return "Respuesta del servidor 2"
          
          if __name__ == "__main__":
              app.run(host="10.0.0.5", port=5001)
  2. Configura el Balanceador de Carga:

    • Abre o crea un archivo de configuración para el balanceador (por ejemplo, /etc/nginx/sites-available/balanceador):

      upstream backend_servers {
          server 127.0.0.1:5000;
          server 127.0.0.1:5001;
          server 127.0.0.1:5002 backup;
      }
      
      server {
          listen 80;
          server_name localhost; #Nombre del servidor
      
          location / {
              # Del bloque upstream
              proxy_pass http://backend_servers;
              
              #
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              
              #♥Configuración de límites de tiempo
              proxy_connect_timeout 5s;
              proxy_read_timeout 10s;
              proxy_send_timeout 10s;
          }
      }
    • Explicación:

      • El bloque upstream define un grupo de servidores backend.

      • Nginx distribuye las peticiones entre estos servidores utilizando el algoritmo round-robin por defecto.

  3. Habilita la Configuración:

    • Crea un enlace simbólico:

      sudo ln -s /etc/nginx/sites-available/balanceador /etc/nginx/sites-enabled/
    • Recarga Nginx:

      sudo systemctl reload nginx
  4. Prueba el Balanceo de Carga:

    • Envía múltiples peticiones al servidor balanceador:

      curl http://localhost/
    • Observa que las respuestas alternan entre las instancias de backend.

  5. Verifica los Logs:

    • Inspecciona los logs de acceso para validar que las peticiones se distribuyen entre los servidores:

      tail /var/log/nginx/access.log

AnteriorProxySiguienteZoraxy

Última actualización hace 5 meses

A partir de aquí, son los.

NGINX proxy manager

Referencia:

🚧
mismos pasos que con un virtualhost
https://claudiu.psychlab.eu/post/homelab-4-install-and-configure-nginx-proxy-manager-with-ssl-wildcard-certs/
https://www.linuxtrainingacademy.com/http-load-balancing-nginx-video-cheatsheet-vagrantfile/
🗃️
🏗️
Page cover image
GitHub - NginxProxyManager/nginx-proxy-manager: Docker container for managing Nginx proxy hosts with a simple, powerful interfaceGitHub
Logo