Naar inhoud gaan
supastack
Blader door de docs
WebTanStack Start

For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /nl/docs/modules/rate-limiting.md (or send Accept: text/markdown).

Frequentiebeperking

Eén limiter voor elke abuse-gevoelige route.

Walkthrough voor beginners

Vereisten: Lees de twee onderstaande beginnershandleidingen, voltooi de lokale webconfiguratie en open deze monorepo in de root van uw editor. Webinstellingen horen thuis in apps/web/.env.local; Next.js leest de root .env niet. /dashboard in de standaard nepmodus is een demo zonder database; /auth heeft een gemigreerde database nodig.

Korte termen: een werkruimte bestaat uit de afzonderlijke gebruikers, gegevens en instellingen van één team. De server is de vertrouwde backend; houd providersleutels uit de browser- en telefooncode. Een migratie is een versiebeheer van de database, waarbij tabellen worden gemaakt of bijgewerkt. Een AI-model is de motor die antwoord geeft; de modelcatalogus is de serverlijst met beschikbare model-ID's en prijzen. Een provider is een externe service, zoals een AI-, e-mail- of factureringsservice. Een recht is een subsidie ​​waarmee een werkruimte een functie kan gebruiken. Een webhook is een bericht dat de ene service naar de URL van een andere service verzendt.

1. Kies in de serveromgeving RATE_LIMIT_STORE=postgres voor gedeelde productiebuckets en stel PUBLIC_AI_DAILY_BUDGET_MICROUNITS=0 zo in dat de openbare AI uitgeschakeld blijft.

2. Stel TRUSTED_PROXY_COUNT alleen in op het exacte aantal gecontroleerde proxy's die doorstuurheaders toevoegen; kopieer 1 niet tenzij dat geldt voor uw host.

3. Controleer of een geweigerd verzoek een 'retry-safe'-fout oplevert. Als de limieten per instantie verschillen, controleer dan of ze Postgres delen.

Voor aangepaste code begint u met de meegeleverde prompts/README.md en kopieert u de dichtstbijzijnde prompt: prompts/new-app-screen.md voor een app-scherm of prompts/new-landing-page.md voor een openbare pagina. Voor server-, database- of providerwerk geeft u uw codeeragent de taak van deze handleiding en vraagt ​​u hem om AGENTS.md, .ai/PROJECT_CONTEXT.md en overeenkomende .ai/-mirrors te lezen; inspecteer de exacte bronbestanden die hier worden genoemd; maak een lijst van bestanden en controleer deze voordat u deze bewerkt; behoud van het eigendom van de werkruimte en geheimen voor de server; en laat je het verschil zien. Vertel het gewenste gedrag, invoer- en uitvoervelden, toegestane rollen, verwacht succes en fouten, en het testaccount, de provider of het apparaat. Gebruik voorbeeldwaarden; plak nooit een echt geheim.

Kies de limiterwinkel

RATE_LIMIT_STORE is geheugen of postgres. Indien niet ingesteld, selecteert de productie Postgres en selecteren andere omgevingen geheugen. Gedeelde rate_limit_bucket-rijen coördineren meerdere servers; opslagfouten kunnen momenteel niet worden geopend om de beschikbaarheid van API te behouden.

Werkruimte-/gebruikers-AI-inzendingslimieten en de openbare API/MCP-begrenzer beschermen hun afzonderlijke oppervlakken. Behoud de bestaande bellerspecifieke buckettoetsen bij het toevoegen van routes.

Vertrouw alleen gecontroleerde proxy-hops

TRUSTED_PROXY_COUNT varieert van 0-10 en telt omgekeerde proxy's die x-forwarded-for toevoegen. Zero vertrouwt niemand en gebruikt een gedeelde onbekende bucket; één gecontroleerde proxy heeft doorgaans 1 nodig. Een onjuiste telling zorgt ervoor dat niet-vertrouwde doorgestuurde waarden de limiter beïnvloeden.

Beperk de uitgaven van anonieme providers

PUBLIC_AI_DAILY_BUDGET_MICROUNITS=0 schakelt openbare AI-oproepen uit. Een geconfigureerde niet-negatieve dagelijkse UTC-limiet reserveert platformuitgaven voordat de provider belt en staat los van het budget van elke werkruimte. Test gelijktijdige reserveringen, verleg grenzen en weigering voordat een factureerbare provider probeert.

RATE_LIMIT_STORE=postgres
TRUSTED_PROXY_COUNT=1
PUBLIC_AI_DAILY_BUDGET_MICROUNITS=0

Setup en configuratie

rate-limit-runtime levert gedeelde limiters die in de abuse-gevoelige oppervlakken zijn bedraad — apiV1Limiter (600 requests/minuut) en authLimiter (300 requests/minuut) zijn de meegeleverde presets. Limits keyen op identiteit plus routebucket en antwoorden met een hervattende 429 met Retry-After in plaats van een generieke fout.

Breid de bestaande limiter uit naar nieuwe abuse-gevoelige endpoints — sign-in, OTP, checkout, task-submissie, key-aanmaak — in plaats van per-route tellers te verzinnen die uit elkaar lopen.

export const apiV1Limiter = createNamedRateLimiter("api-v1", 600, 60_000);
export const authLimiter = createNamedRateLimiter("auth", 300, 60_000);

Implementatieworkflow

Kies de key zorgvuldig: per-user voor geauthenticeerde acties, per-API-key voor publiek verkeer, per-IP alleen als laatste redmiddel voor anonieme endpoints. Legitieme bursts krijgen een Retry-After; aanvallen raken een hard plafond.

Houd de limiter fail-closed op abuse-gevoelige routes — is de store onbereikbaar, verkies dan duur werk te weigeren boven het ongelimiteerd doorlaten.

Verificatie en probleemoplossing

Oefen een limiter tot hij 429 teruggeeft met een zinnige Retry-After, verifieer dat verschillende workspaces onafhankelijke buckets krijgen en bevestig dat een burst na het venster weer naar succes terugkeert. Log weigeringen zonder de gevoelige payload van het verzoek.