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.
Réponse
Trop de publicités?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..)