1 votes

limiter la bande passante vers l'API comme le fait Twitter

Je cherche à limiter le nombre de requêtes api des clients. je me demande s'il existe un moyen de le faire avec apache ou si je dois écrire du code.

0voto

Pablo Venturino Points 1660

Je ne le ferais pas dans Apache Je le ferais au niveau de la couche réseau avec iptables.

iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set

iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 86400 --hitcount 100 -j REJECT

Remplacez 86400 par le nombre de secondes pendant lesquelles vous souhaitez conserver le blocage (86400 correspond à 1 jour) et 100 par le nombre d'occurrences, c'est-à-dire le nombre que vous êtes prêt à autoriser par IP.

Vous pouvez également changer -j REJECT en -j DROP, qui définit le comportement du paquet lorsque la condition est remplie. DROP laisse tomber les paquets de manière transparente, et REJECT renvoie un "port inaccessible" ou une erreur similaire.

Cela dit, il existait un mod_throttle qui faisait quelque chose de similaire, mais je n'arrive pas à trouver beaucoup d'informations à son sujet. Je pense que c'est plus propre de faire ce genre de choses au niveau du réseau/kernel, plutôt que dans Apache. Apache est bon à servir les demandes. Laissez-le faire ce qu'il fait de mieux, et ne l'accablez pas de la nécessité de suivre les connexions.

(oui, je viens de copier ma réponse à une question précédente..)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X