Cargando



Nginx - Limitando Peticiones

En este tutorial veremos como limitar las peticiones en nuestro servidor con Nginx.


jun 21 2014 21:00
Profesional
jun 22 2014 13:37
A pesar que Nginx es orientado a eventos y que esto nos permite optimizar los recursos para dar respuestas veloces y con menos consumo de recursos, hay momentos en que no es suficiente y de igual manera el servicio se empieza a quedar corto.

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:

nginx_limitando_pet.jpg


¿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.

Llave de la sesión
Podemos usar prácticamente cualquier valor como llave de sesión, sin embargo se recomienda que se utilice un valor pequeño que pueda acomodarse en memoria con todas las peticiones adicionales, de forma que al multiplicar el total de las conexiones entrantes por el valor del tamaño de todas las sesiones sea menor que el tamaño del cache de sesión, si esto no ocurre no podremos utilizar el máximo de las zonas que estamos estableciendo, destruyendo así el propósito de lo que estamos construyendo con los límites de las peticiones.


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.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X