Rate limiting og throttling med Nginx
Opsæt rate limiting for at beskytte backendtjenester mod misbrug og sikre en fair anvendelse af ressourcer.
Rate limiting og throttling med Nginx er en gratis API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i API-gateway og reverse proxy (Nginx + Spring Cloud Gateway), og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)-kurset indeholder 4 lektioner i alt.
Hvorfor hastighedsbegrænsning er vigtig
Forestil dig et populært websted eller en populær API. Hvad sker der, hvis én bruger eller en ondsindet bot sender tusindvis af anmodninger i sekundet?
Det er her, hastighedsbegrænsning kommer ind i billedet! Det er en vigtig teknik til at kontrollere, hvor mange anmodninger en klient må sende til din server inden for et bestemt tidsrum.
- Forhindrer misbrug og DDoS-angreb.
- Sikrer fair brug af ressourcer for alle klienter.
- Beskytter dine backend-tjenester mod overbelastning.
Nginx' vigtigste direktiver
Nginx indeholder effektive direktiver til at implementere hastighedsbegrænsning. Vi fokuserer på to vigtige:
limit_req_zone: Definerer parametrene for en zone til hastighedsbegrænsning. Se det som opsætning af reglerne for en bestemt type trafik.limit_req: Anvender de definerede regler for hastighedsbegrænsning på anmodninger i en bestemtlocation- ellerserver-blok. Det er her, magien sker!
Definering af din zone til hastighedsbegrænsning
Direktivet limit_req_zone placeres normalt i http-blokken i din Nginx-konfiguration. Det definerer en delt hukommelseszone, hvor Nginx holder styr på anmodningernes tilstand.
Her er direktivets struktur og betydningen af de enkelte dele:
key: Det, Nginx holder styr på (f.eks.$binary_remote_addrfor klientens IP-adresse).zone: Et navn til din zone og dens størrelse (f.eks.my_limit:10m). Størrelsen bestemmer, hvor mange unikke nøgler Nginx kan holde styr på.rate: Den faktiske hastighedsbegrænsning (f.eks.rate=1r/sfor 1 anmodning i sekundet).
Opsætning af din første zone
Lad os definere en enkel zone til hastighedsbegrænsning, som holder styr på anmodninger efter klientens IP-adresse og tillader 5 anmodninger i sekundet.
http {
# ... other http settings ...
limit_req_zone $binary_remote_addr zone=my_ip_limit:10m rate=5r/s;
server {
# ...
}
}Tilknytning af begrænsninger til placeringer
Efter at have defineret en limit_req_zone skal du anvende den på bestemte dele af dit websted eller din API ved hjælp af direktivet limit_req.
Dette direktiv placeres i en server- eller location-blok. Det refererer blot til den zone, du oprettede tidligere.
Hvis du f.eks. vil anvende zonen my_ip_limit på en bestemt placering:
limit_req zone=my_ip_limit;Når en klient overskrider den definerede hastighed, returnerer Nginx som standard fejlen 503 Service Unavailable.
En komplet grundlæggende hastighedsbegrænsning
Sådan kan du kombinere begge direktiver for at begrænse anmodninger til dit /api/-endepunkt til 2 anmodninger i sekundet pr. unik IP-adresse.
http {
limit_req_zone $binary_remote_addr zone=api_requests:10m rate=2r/s;
server {
listen 80;
server_name example.com;
location /api/ {
limit_req zone=api_requests;
proxy_pass http://backend_service;
}
}
}Tilladelse af midlertidige spidsbelastninger
Strenge hastighedsbegrænsninger kan nogle gange være for restriktive for legitime brugere. Parameteren burst giver en klient mulighed for midlertidigt at sende flere anmodninger end den definerede hastighed.
burst=N: Tillader op til N anmodninger mere end hastighedsbegrænsningen. Disse anmodninger sættes i kø og behandles med den begrænsede hastighed.nodelay: Når den bruges sammen medburst, behandler Nginx om muligt burst-anmodninger med det samme. Hvis køen er fuld, kasseres efterfølgende anmodninger (503-fejl) i stedet for at blive forsinket.
Uden nodelay forsinkes anmodninger, der overskrider hastigheden, så de overholder den begrænsede hastighed.
Hastighedsbegrænsning med tolerance for spidsbelastning
Lad os opdatere vores tidligere eksempel, så det tillader en spidsbelastning på op til 5 ekstra anmodninger og behandler dem med det samme, hvis ressourcerne tillader det.
http {
limit_req_zone $binary_remote_addr zone=api_requests:10m rate=2r/s;
server {
listen 80;
server_name example.com;
location /api/ {
limit_req zone=api_requests burst=5 nodelay;
proxy_pass http://backend_service;
}
}
}Hastighedsbegrænsning kontra drosling
Selvom begreberne ofte bruges som synonymer, er der en mindre forskel:
- Hastighedsbegrænsning: Håndhæver en fast grænse for antallet af anmodninger i en periode (f.eks. 100 anmodninger i minuttet). Nginx'
limit_reqimplementerer primært hastighedsbegrænsning. - Drosling: Er en mere dynamisk proces, som kan sænke anmodninger i stedet for helt at afvise dem. Den tager ofte højde for serverbelastning eller tilgængelige ressourcer. Selvom Nginx kan forsinke anmodninger med
burst(hvisnodelayikke er angivet), fokuserer det primært på strenge begrænsninger.
Til de fleste behov for API-beskyttelse er Nginx' funktioner til hastighedsbegrænsning robuste og særdeles effektive.
Hurtig kontrol
Du har lært om de vigtigste Nginx-direktiver til hastighedsbegrænsning. Lad os nu teste din viden!
Opsummering: Beskyttelse af dine API'er
I denne lektion har du lært, hvordan du implementerer hastighedsbegrænsning med Nginx for at beskytte dine backend-tjenester og sikre fair brug.
- Vi definerede en zone til hastighedsbegrænsning ved hjælp af
limit_req_zone. - Vi anvendte disse begrænsninger på bestemte placeringer ved hjælp af
limit_req. - Vi undersøgte indstillingerne
burstognodelaytil mere fleksibel håndtering af midlertidige trafikspidsbelastninger.
Hastighedsbegrænsning er et grundlæggende mønster inden for sikkerhed og ydeevne, især når du arbejder med offentlige API'er eller webapplikationer med meget trafik.
Lær API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Rate limiting og throttling med Nginx” gratis?
Ja — hele teksten til “Rate limiting og throttling med Nginx” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)-kurset, skal du opgradere til CoddyKit PRO. API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Rate limiting og throttling med Nginx”?
Opsæt rate limiting for at beskytte backendtjenester mod misbrug og sikre en fair anvendelse af ressourcer. Du øver dig i API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)?
Der kræves ingen tidligere erfaring. API-gateway og reverse proxy (Nginx + Spring Cloud Gateway) på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Rate limiting og throttling med Nginx”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)-lektion?
Ja. Alle API-gateway og reverse proxy (Nginx + Spring Cloud Gateway)-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- API-versionering med Nginx
- Cross-Origin Resource Sharing (CORS)
- Rate limiting og throttling med Nginx
- Path-baseret routing til mikrotjenester