Cuando esto sucede la web empieza a tener muchos errores de “Timeout”, es decir pasa mucho tiempo desde la petición hasta que Nginx pueda atender la misma, la solución inmediata y recomendada es mejorar el hardware del servidor, ya sea más memoria RAM o mejor procesador o ambas, sin embargo no siempre esto es posible.
Límite
El límite que podemos establecer es reducir la cantidad de memoria que se consume por las peticiones y reducir la frecuencia de estas, esto lo logramos creando una zona utilizando una sesión para poder saber a quién vamos a limitar en sus peticiones contra nuestro servicio Nginx.
Veamos en la siguiente imagen un ejemplo de cómo podemos establecer dichas zonas y límites:
¿Cómo Funciona el Límite?
El ejemplo anterior es muy sencillo de entender, primero en nuestro bloque HTTP hemos establecido la zona, esto lo hacemos con limit_req_zone, que nos indica cual es la variable que vamos a establecer para construir la misma, en este caso el binario de la dirección IP remota, es decir, del cliente, esto es lo que nos va a servir como valor identificador o llave de la sesión, luego con zone establecemos el espacio que vamos a asignarle a dicha zona y por último la frecuencia de las peticiones aceptadas, en este caso será una petición por segundo.
Ahora en nuestro bloque server con limit_req le decimos que va a tomar la zona que establecimos en el bloque HTTP, esto nos permite establecer una cantidad “infinita” de zonas, aquí el límite es la cantidad de memoria que tenga el equipo donde alojamos el servicio de Nginx. Cuando se llega al tope de las peticiones, los usuarios verán un errror 503 de servicio no disponible, evitando así que la experiencia de los otros usuarios sufra por un bajo rendimiento.
Con esto finalizamos este tutorial, como vemos a pesar que la idea es siempre mejorar el rendimiento de nuestro servicio, Nginx también nos ofrece herramientas que podemos utilizar cuando nuestro hardware no da para más, lo que hemos explicado acá debe ser un último recurso, pero hay casos como los servidores compartidos que no podemos hacer ninguna modificación y que debemos apelar por este tipo de soluciones.