Na svem web-serveru sem si nastavil rate-limiting dle tohodle blogu:
https://www.nginx.com/blog/rate-limiting-nginx/limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s;
limit_req zone=req_zone burst=20 nodelay;
Otestoval sem propustnost web-serveru pomoci apache-benchmarku a dostal sem kolem 350req/s. Pak sem si rekl, ze by snad nebylo spatne z toho vyhodit lokalni IP aby nebyly tim rate-limitingen pri testovani ovlivneny. Doplnil sem tedy whitelisting pomoci "geo" a "map" (misto "999.999.999.999" je tam skutecna IPv4 adresa). Prislusna cast konfigurace vypada ted takhle:
geo $limit {
default 1;
127.0.0.1 0;
999.999.999.999 0;
}
map $limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=req_zone:10m rate=10r/s;
limit_req zone=req_zone burst=20 nodelay;
K memu zdeseni,
hodnota request/sec padla z ~350 na ~30! Vratil sem se ke konfiguraci bez whitelistu, restartoval nginx, nekolikrat otestoval, opet sem mel ~350req/s. Opet sem aktivoval whitelist, restartoval nginx, otestoval, a opet mam jen kolem 30req/s. Co delam spatne? Nemohu uverit, ze jednoduchej whitelist (bez "if") by takhle srazil rychlosts web-serveru...