Internet → Cloudflare → Nginx → TrueBlock API (Node.js)
# Habilitar trust proxy para múltiples proxies
TRUST_PROXY=true
# Número de proxies: Cloudflare (1) + Nginx (1) = 2
PROXY_COUNT=2
# Habilitar debugging en desarrollo
DEBUG_PROXY=falseLa aplicación está configurada para confiar en 2 proxies:
- Cloudflare - CDN/WAF global
- Nginx - Proxy inverso local
CF-Connecting-IP: IP real del clienteCF-Ray: ID único de la peticiónCF-IPCountry: País del clienteCF-Visitor: Información del protocolo
X-Forwarded-For: Cadena de IPsX-Real-IP: IP del clienteX-Forwarded-Proto: Protocolo (http/https)X-Forwarded-Host: Host original
- CF-Connecting-IP (prioridad alta) - IP real de Cloudflare
- X-Forwarded-For (primera IP) - Fallback
- X-Real-IP - Backup de Nginx
- req.ip - Express con trust proxy
- General: 100 req/15min
- Validación: 10 req/hora
- Staking: 5 req/hora
- Publicación: 5 req/día
- Búsqueda: 50 req/minuto
GET /debug/proxy-infoRespuesta esperada:
{
"proxyInfo": {
"trustProxy": 2,
"clientIP": {
"express": "real.client.ip",
"cloudflare": "real.client.ip",
"realClient": "real.client.ip"
},
"cloudflareInfo": {
"isCloudflare": true,
"country": "US",
"ray": "1234567890abcdef"
}
}
}# Verificar headers en desarrollo
curl -H "CF-Connecting-IP: 1.2.3.4" \
-H "X-Forwarded-For: 1.2.3.4,127.0.0.1" \
http://localhost:3000/debug/proxy-infoUsar el archivo nginx.conf incluido que configura:
- ✅ Headers de proxy correctos
- ✅ Rate limiting a nivel de Nginx
- ✅ SSL/TLS seguro
- ✅ Timeouts apropiados
- ✅ Logging detallado
# Copiar configuración
sudo cp nginx.conf /etc/nginx/sites-available/trueblock
sudo ln -s /etc/nginx/sites-available/trueblock /etc/nginx/sites-enabled/
# Validar configuración
sudo nginx -t
# Reiniciar Nginx
sudo systemctl restart nginx- Modo: Full (strict)
- Min TLS: 1.2
- HSTS: Habilitado
- Rate Limiting: Configurar límites adicionales
- Bot Fight Mode: Habilitado
- DDoS Protection: Automático
api.trueblock.app/health*
- Cache Level: No Cache
api.trueblock.app/api/*
- Cache Level: No Cache
- Security Level: High
Síntoma: Error de rate limiting con trust proxy false
Solución:
TRUST_PROXY=true
PROXY_COUNT=2Síntoma: Viendo IP de Nginx en lugar de IP real
Verificar:
trust proxyconfigurado correctamente- Headers de Nginx enviando
CF-Connecting-IP - Cloudflare pasando headers correctos
Ajuste temporal:
NODE_ENV=development # Usa limits más altos
DEBUG_PROXY=true # Ver detalles en logs# Logs de aplicación
tail -f logs/app.log | grep "RATE LIMIT"
# Logs de Nginx
tail -f /var/log/nginx/trueblock-access.log
tail -f /var/log/nginx/trueblock-error.log
# Logs de sistema
journalctl -u nginx -f- Rate limit violations: Monitorear picos
- Response times: Detectar cuellos de botella
- Error rates: 429 vs 500 errors
- Geographic distribution: Via Cloudflare Analytics
X-Frame-Options: DENYX-Content-Type-Options: nosniffX-XSS-Protection: 1; mode=blockStrict-Transport-Security
- Application level: Express rate limit
- Proxy level: Nginx rate limit
- CDN level: Cloudflare rate limit
Para APIs internas:
# En Nginx
allow 10.0.0.0/8; # Red interna
allow 127.0.0.1; # Localhost
deny all;-
TRUST_PROXY=trueen producción -
PROXY_COUNT=2configurado - Nginx con headers correctos
- Cloudflare SSL en modo Full (strict)
- Rate limits apropiados para tu uso
- Logs configurados y rotando
- Monitoreo de métricas activo
-
DEBUG_PROXY=falseen producción