¿Qué necesitas antes de empezar?
- Dos servidores (pueden ser VPS separados o instancias distintas): uno actuará como reverse proxy con Nginx, y el otro como servidor backend real.
- Acceso SSH con privilegios de administrador a ambos servidores.
- Un dominio apuntando a la IP del servidor proxy, necesario para configurar HTTPS correctamente (opcional pero muy recomendado).
Ventajas de usar un reverse proxy
- Ocultación de la IP real del backend: los clientes solo interactúan con el proxy; la IP del servidor donde vive realmente tu aplicación permanece privada.
- Protección contra ataques directos: el proxy puede filtrar tráfico malicioso, aplicar límites de tasa y bloquear IPs sospechosas antes de que lleguen al servidor principal.
- Balanceo de carga: distribuye las peticiones entre varios servidores backend, mejorando rendimiento y disponibilidad.
- Caché de contenido estático: reduce la carga del servidor principal almacenando temporalmente recursos que no cambian con frecuencia.
Paso 1: Instalar Nginx
En distribuciones basadas en Debian/Ubuntu:
sudo apt update
sudo apt install nginx -y En distribuciones basadas en Red Hat/CentOS:
sudo yum install nginx -y Paso 2: Configuración básica del reverse proxy
Edita el archivo de configuración del sitio:
sudo nano /etc/nginx/sites-available/default Y define el bloque server que redirige el tráfico hacia tu backend real:
server {
listen 80;
server_name tu-dominio.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
} Verifica que la sintaxis sea correcta y reinicia Nginx para aplicar los cambios:
sudo nginx -t
sudo systemctl restart nginx Paso 3: Habilitar HTTPS con Let's Encrypt
Instala Certbot, la herramienta oficial para obtener certificados SSL gratuitos de Let's Encrypt:
sudo apt install certbot python3-certbot-nginx -y Genera y aplica el certificado automáticamente para tu dominio:
sudo certbot --nginx -d tu-dominio.com Programada la renovación automática, ya que los certificados de Let's Encrypt expiran cada 90 días:
sudo crontab -e 0 0 * * * certbot renew --quiet Filtrado de tráfico malicioso por IP
Nginx permite bloquear o permitir direcciones IP específicas directamente en el bloque location:
location / {
deny 192.168.1.1; # Bloquea una IP específica
allow 192.168.1.0/24; # Permite solo un rango de IPs
deny all; # Bloquea todo lo demás
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
} Limitación de solicitudes (rate limiting)
Para protegerte de ataques de fuerza bruta o scraping agresivo, define una zona de limitación de tasa en el bloque http y aplícala en el location:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/s;
server {
location / {
limit_req zone=one burst=10;
proxy_pass http://127.0.0.1:8080;
}
}
} Esta configuración permite hasta 30 solicitudes por segundo por IP, con un margen (burst) de 10 solicitudes adicionales antes de empezar a rechazar peticiones.
Añadir ModSecurity como firewall de aplicación web (WAF)
Para una capa de seguridad adicional a nivel de aplicación, puedes integrar ModSecurity, un firewall de aplicación web de código abierto:
sudo apt install libnginx-mod-security -y Habilita el módulo en la configuración principal de Nginx:
sudo nano /etc/nginx/nginx.conf load_module modules/ngx_http_modsecurity_module.so; Y configura las reglas base en el archivo dedicado:
sudo nano /etc/nginx/modsec/main.conf Configuración de balanceo de carga
Si tienes más de un servidor backend, Nginx puede distribuir el tráfico entre ellos automáticamente con un bloque upstream:
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
} Por defecto, Nginx usa un algoritmo round-robin (distribuye las peticiones de forma secuencial entre los servidores). También soporta balanceo por menor número de conexiones activas (least_conn) o por IP del cliente (ip_hash), según lo que mejor se adapte a tu caso de uso.
Consideraciones de seguridad adicionales
- Habilita el firewall del sistema para permitir únicamente los puertos necesarios:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp - Añade Fail2Ban para protegerte de intentos de fuerza bruta contra el propio panel o servicios expuestos:
sudo apt install fail2ban -y - Mantén Nginx y los certificados SSL actualizados, ya que las vulnerabilidades en el software del proxy afectan a todo el tráfico que pasa por él.
Un reverse proxy bien configurado con Nginx te da tres beneficios que rara vez se consiguen con tan poco esfuerzo: anonimato real de tu infraestructura backend, una capa de filtrado de tráfico malicioso antes de que llegue a tu aplicación, y la base necesaria para escalar horizontalmente con balanceo de carga. Combínalo con HTTPS, límites de tasa y Fail2Ban para una configuración de seguridad completa y lista para producción. Si tienes dudas durante la implementación, nuestro equipo de soporte técnico está disponible 24/7 para ayudarte.
Hosting con LiteSpeed, NVMe y soporte 24/7 desde $3/mes.