Introducing ZYNOO General Purpose & CPU Optimized Servers   Learn More >

Rate limiting in Nginx configureren op Ubuntu

Rate limiting in Nginx is een ingebouwde functie die bepaalt hoeveel HTTP-verzoeken een client binnen een bepaalde periode kan doen. Hiermee kun je overmatig verkeer naar API’s, inlogpagina’s en toepassingen die veel systeembronnen gebruiken beperken, zonder extra software te installeren.

In deze handleiding configureer je verzoeklimieten in Nginx, test je ze veilig en schakel je de bescherming in op een Ubuntu-server.

Hoe werkt rate limiting in Nginx?

Nginx gebruikt de module limit_req om inkomende verzoeken bij te houden, meestal op basis van het IP-adres van de client.

Je kunt bijvoorbeeld een gemiddelde limiet van vijf verzoeken per seconde instellen en tegelijkertijd korte pieken in het verkeer toestaan. Verzoeken die de toegestane piek overschrijden, kunnen vervolgens worden geweigerd.

Dit helpt voorkomen dat je toepassing overbelast raakt door te veel verzoeken.

Opmerking: Rate limiting helpt bepaalde Layer 7-HTTP-floods te beperken. Het kan geen grootschalige DDoS-aanvallen op netwerkniveau stoppen die je verbinding verzadigen.

rate limiting in Nginx configureren

Vereisten

Je hebt een Ubuntu-server nodig waarop Nginx is geïnstalleerd, SSH-toegang met sudo-rechten en een bestaande website of toepassing.

Maak een back-up van je bestaande websiteconfiguratie voordat je wijzigingen aanbrengt.

Stap 1: Definieer een zone voor rate limiting

Maak via SSH verbinding met je server.

Maak bij een standaardinstallatie van Nginx op Ubuntu een nieuw configuratiebestand aan:

sudo nano /etc/nginx/conf.d/rate-limit.conf

Voeg het volgende toe:

limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s;

Deze configuratie gebruikt het IP-adres van de client om verzoeken bij te houden, reserveert 10 MB voor de bijbehorende gegevens en stelt een gemiddelde limiet in van vijf verzoeken per seconde per IP-adres.

De instructie limit_req_zone moet binnen de http-context van Nginx staan. In de standaardconfiguratie van Ubuntu worden conf.d-bestanden daar opgenomen.

Sla het bestand op.

Stap 2: Schakel rate limiting in voor je website

Open je bestaande Nginx-configuratie voor de website:

sudo nano /etc/nginx/sites-available/app.example.com

Vervang de bestandsnaam door die van je eigen configuratiebestand.

Voor een HTTP-toepassing die op poort 3000 draait, kan een beveiligd API-eindpunt er zo uitzien:

location /api/ {
    limit_req zone=perip burst=10 nodelay;
    limit_req_status 429;
    limit_req_dry_run on;

    proxy_pass http://127.0.0.1:3000;
}

Dit doen de belangrijkste instructies:

  • limit_req: Past de eerder gedefinieerde limiet toe.
  • burst=10: Staat een korte piek van extra verzoeken toe.
  • nodelay: Verwerkt toegestane verzoeken tijdens een piek direct.
  • limit_req_status 429: Geeft HTTP 429 terug wanneer verzoeken worden geweigerd.
  • limit_req_dry_run on: Registreert overmatige verzoeken zonder ze te blokkeren.

Belangrijk: Voeg deze instructies voor rate limiting toe aan je bestaande, bijbehorende location-blok. Maak geen dubbele location-blokken aan en vervang je bestaande backendconfiguratie niet.

De getoonde waarden zijn voorbeelden. Kies limieten op basis van de normale verzoekpatronen van je toepassing.

Stap 3: Controleer je Nginx-configuratie

Controleer de configuratie:

sudo nginx -t

Als de test slaagt, laad je Nginx opnieuw:

sudo systemctl reload nginx

Als er een fout verschijnt, los je die op voordat je de configuratie opnieuw laadt.

Stap 4: Test de verzoeklimiet

Omdat de dry-run-modus is ingeschakeld, worden verzoeken nog niet geweigerd.

Houd het foutenlogboek van Nginx in de gaten:

sudo tail -f /var/log/nginx/error.log

Verstuur vanuit een andere terminal een kleine reeks testverzoeken naar een eindpunt dat je beheert:

for i in $(seq 1 15); do
  curl -s -o /dev/null -w "%{http_code}\n" \
  https://app.example.com/api/health
done

Vervang de URL door een werkend eindpunt van je eigen test- of stagingtoepassing.

Als verzoeken de limiet overschrijden, zou Nginx berichten met limiting requests, dry run in het foutenlogboek moeten registreren.

Je toepassing zou normaal moeten blijven reageren, omdat het weigeren van verzoeken nog niet is ingeschakeld.

Stap 5: Schakel rate limiting in

Wanneer je de resultaten hebt bekeken en hebt bevestigd dat je limieten geschikt zijn, verwijder je deze instructie uit het beveiligde location-blok:

limit_req_dry_run on;

Controleer de configuratie opnieuw en laad Nginx opnieuw:

sudo nginx -t
sudo systemctl reload nginx

Overmatige verzoeken kunnen nu de reactie HTTP 429 Too Many Requests krijgen.

Herhaal een gecontroleerde test en controleer de responscodes. De precieze resultaten hangen af van de timing van de verzoeken en de limieten die je hebt ingesteld.

De wijzigingen ongedaan maken

Als legitieme gebruikers hinder ondervinden, zet je het volgende terug:

limit_req_dry_run on;

Controleer de configuratie en laad Nginx opnieuw. Hierdoor keert de configuratie terug naar de monitoringmodus, waarin verzoeken niet worden geweigerd.

Daarna kun je de limieten aanpassen op basis van het werkelijke verkeer.

Belangrijk: Nginx achter Cloudflare of een andere CDN

Als Nginx achter een reverseproxy staat, kan het client-IP-adres dat Nginx ziet van de proxy zijn in plaats van van de oorspronkelijke bezoeker.

Als je dit niet corrigeert voordat je limieten per IP-adres toepast, kunnen niet-gerelateerde gebruikers als één groep worden behandeld.

Configureer de verwerking van vertrouwde client-IP-adressen met de Real IP-module van Nginx en de gedocumenteerde IP-bereiken van je proxyprovider voordat je limieten per client afdwingt.

Vertrouw nooit zomaar op IP-headers die bezoekers meesturen.

Vervangt rate limiting in Nginx DDoS-bescherming?

Nee. Nginx kan overmatige HTTP-verzoeken aan je toepassing beperken, maar kan geen verkeer filteren dat de upstreamnetwerkverbinding van je server al heeft verzadigd.

Combineer voor bredere bescherming maatregelen op toepassingsniveau met maatregelen op hostingniveau.

Veelgestelde vragen

Is rate limiting in Nginx gratis?

Ja. Nginx Open Source bevat de module limit_req.

Kan rate limiting in Nginx legitieme bezoekers blokkeren?

Ja. Te strenge instellingen kunnen legitieme verzoeken weigeren, vooral wanneer meerdere gebruikers één IP-adres delen. Test de instellingen in dry-run-modus voordat je het weigeren van verzoeken inschakelt.

Werkt rate limiting in Nginx voor API’s?

Ja. Het is vooral nuttig om overmatige verzoeken aan API-eindpunten en andere routes binnen een toepassing die veel systeembronnen gebruiken te beperken.

Conclusie

Nginx biedt ingebouwde rate limiting waarmee je overmatig HTTP-verkeer kunt beperken zonder extra software te installeren.

Configureer de verzoeklimiet, test deze in dry-run-modus en schakel het weigeren van verzoeken pas in nadat je de resultaten hebt bekeken.

Gebruik voor uitgebreide serverbescherming rate limiting naast passende DDoS-bescherming op upstreamniveau.

Table of Content

Een Nginx-reverseproxy ontvangt verzoeken van websitebezoekers en stuurt ze door naar een andere server of

Een 502 Bad Gateway-fout in Nginx betekent meestal dat Nginx geen geldig antwoord heeft ontvangen

Een 504 Gateway Timeout-fout treedt op wanneer een server die als gateway of proxy fungeert,

Build your next project with ZYNOO

From your first website to demanding applications, choose the resources and control you need.

Shared Hosting

Start your blog or business website with cPanel, LiteSpeed and CloudLinux.

VPS Hosting

Grow your websites and applications with NVMe storage, KVM virtualization and full root access.

Dedicated Servers

Power demanding projects with your own physical server, dedicated resources and control over your environment.

Scroll naar boven