===== Zones en nginx ===== Esto nos sirve básicamenta para hacer lo que haría Cloudflare: limitar acceso a recursos para que el servidor no reviente, o en su defecto, evitar ataques DDoS o al menos mitigarlos. Para hacer esto, debemos definir una zone en nginx y asignandole memoria para que los *worker processes* puedan comunicarse entre ellos tranquilamente, dentro del bloque http (no dentro de server): limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; Luego en el bloque de ''server'' pondríamos las reglas: server { listen 80; location / { limit_req zone=mylimit; } root /var/www/html; } Esto básicamente nos daría un ratio de 1 request por minuto. Si se hiciese mas de una request por minuto, nginx te dirá que pares, que 503 para ti. Esto es el rate limiting mas básico que hay, podemos hacer cosas mas especificas como hacer que vaya mas lento desde ''n'' request y que pare de dar respuesta desde ''n+3'' requests, por ejemplo server { listen 80; location / { limit_req zone=mylimit burst=5 delay=3; } root /var/www/html; } También puedes limitar el ancho de banda en un servidor, o en una localización del servidor, para que no se coma todo el ancho de banda: server { listen 80; location /downloads/ { limit_rate_after 1m; limit_rate 500k; } root /var/www/html; } Esto limitará la velocidad a 500k después de 1m de conexión. ==== Cachear respuestas de proxy inverso ==== Para no sobrecargar tanto APIs o el propio Backend de nuestra cosa, podríamos decirle a nginx que guarde en caché algunas respuestas del backend para hacerlo algo mas rápido: proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=cache:10m max_size=1g; server { listen 80; proxy_cache cache; location / { proxy_pass http://127.0.0.1:3000; } root /var/www/html; }