esto es la suraguwiki el contenido, como puedes ver, deja mucho que desear para comentarios sobre los cosos aquí, puedes mandar un correo a diego arroba suragu punto net

Si eres un putísimo crack y quieres contribuir a esta wiki, pídeme una cuenta en el mismo correo de arriba

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):

/etc/nginx/nginx.conf
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

Luego en el bloque de server pondríamos las reglas:

/etc/nginx/nginx.conf
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

/etc/nginx/nginx.conf
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:

/etc/nginx/nginx.conf
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:

/etc/nginx/nginx.conf
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;
}