Rate limit requests
Hoe kun je zorgen dat je applicatie niet bestookt wordt met requests van dezelfde bots / bezoekers.
Het komt erg vaak voor dat je applicatie bestookt wordt met requests van eenzelfde IP. Omdat dan je php-fpm processen snel op raken is er geen ruimte meer voor gewoon bezoek.
Door simpel weg het aantal PHP requests per ip te limiteren los je veel van deze problemen op. Je kunt
met het hipex
commando deze rate limiting geheel naar wens instellen.
Hoe werkt het
Bij rate limiting limiteer je het maximaal aantal requests per minuut dat van één IP af mag komen. Alleen veel pagina's hebben naast de initiele request ook nog een aantal ajax requests. De requests komen dus in een burst binnen.
Met het rate limit commando kun je per path prefix, volledig request path of regex instellen hoeveel requests er per ip per minuut maximaal mogen binnen komen en hoeveel er in burst.
De limitaties worden opgeslagen in de domain configuratie folder in deze bestanden.
~/domains/<domain>/var/etc/rate-limit.nginx.conf
~/domains/<domain>/var/etc/scope-http/rate-limit.nginx.conf
Limiteren met burst
Om bijvoorbeeld het aantal requests op PHP te limiteren naar 5 per minuut gebruik je dit commando:
hipex security:ratelimit 5
De bezoeker kan dan 1 request per 12 seconden uitvoeren die in PHP uit komt. Voeg hier burst aan toe en de bezoeker mag 1 request per 12 seconden doen of 5 requests in 1 keer en dan 1 minuut geen requests meer.
hipex security:ratelimit 5 --burst=5
Specifieke paden
Wil je de requests op de admin login blokkeren naar 1 per minuut gebruik voeg je hier het pad aan toe:
hipex security:ratelimit 1 /<beheer>/admin/index/index
(
Of juist voor de skin & media zodat de bezoeker wel snel alle static content kan binnen halen
hipex security:ratelimit 1000 /media
Prefix, volledig pad en regex
Standaard worden de paden gezien als prefix. Je hebt ook de mogelijkheid om paden als een regex op te geven:
hipex security:ratelimit 1000 '/(media|skin)' --path-type=regex
Of een absoluut pad:
hipex security:ratelimit 1000 /checkout/cart/add --path-type=exact
Verwijderen
Als je wilt inzien welke rate limitaties actief zijn kun je het commando uitvoeren zonder argumenten.
hipex security:ratelimit
+-----------+-----------+-----------+-------+
| Path | Path Type | Frequency | Burst |
+-----------+-----------+-----------+-------+
| php | prefix | 1r/m | 20 |
| /somepath | prefix | 1r/m | 2 |
+-----------+-----------+-----------+-------+
Je kunt een regel verwijderen met de --remove
option.
hipex security:ratelimit 2 /somepath --remove
Help
Uiteraard is ook de --help
option geïmplementeerd zodat je alle opties en mogelijkheden van het commando
ook via de command line kunt bekijken:
hipex security:ratelimit --help