> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# Rate Limiting

Ein Limiter für jede missbrauchsanfällige Route.

## Schritt-für-Schritt für Einsteiger

Voraussetzungen: Lesen Sie die beiden folgenden Einsteigerhandbücher, schließen Sie die lokale Web-Einrichtung ab und öffnen Sie dieses Monorepo im Stammverzeichnis in Ihrem Editor. Webeinstellungen gehören in `apps/web/.env.local`; Next.js liest das Stammverzeichnis `.env` nicht. `/dashboard` im Standard-Fake-Modus ist eine Demo ohne Datenbank; `/auth` benötigt eine migrierte Datenbank.

Kurze Begriffe: Ein Arbeitsbereich umfasst die einzelnen Benutzer, Daten und Einstellungen eines Teams. Der Server ist das vertrauenswürdige Backend; Halten Sie Anbieterschlüssel aus Browser- und Telefoncodes fern. Eine Migration ist eine versionierte Datenbankänderung, die Tabellen erstellt oder aktualisiert. Ein KI-Modell ist der Motor, der antwortet; Der Modellkatalog ist die Liste der verfügbaren Modell-IDs und Preise des Servers. Ein Anbieter ist ein externer Dienst wie ein KI-, E-Mail- oder Abrechnungsdienst. Eine Berechtigung ist eine Bewilligung, die einem Arbeitsbereich die Nutzung einer Funktion ermöglicht. Ein Webhook ist eine Nachricht, die ein Dienst an den URL eines anderen Dienstes sendet.

1. Wählen Sie in der Serverumgebung `RATE_LIMIT_STORE=postgres` für gemeinsam genutzte Produktions-Buckets und stellen Sie `PUBLIC_AI_DAILY_BUDGET_MICROUNITS=0` so ein, dass die öffentliche KI deaktiviert bleibt.

2. Stellen Sie `TRUSTED_PROXY_COUNT` nur auf die genaue Anzahl der kontrollierten Proxys ein, die Weiterleitungsheader anhängen. Kopieren Sie `1` nicht, es sei denn, dies trifft auf Ihren Host zu.

3. Stellen Sie sicher, dass eine abgelehnte Anfrage einen Wiederholungsfehler zurückgibt. Wenn die Grenzwerte zwischen den Instanzen unterschiedlich sind, überprüfen Sie, ob sie Postgres gemeinsam haben.

Beginnen Sie für benutzerdefinierten Code mit dem bereitgestellten `prompts/README.md` und kopieren Sie die nächstgelegene Eingabeaufforderung: `prompts/new-app-screen.md` für einen App-Bildschirm oder `prompts/new-landing-page.md` für eine öffentliche Seite. Geben Sie Ihrem Programmieragenten für Server-, Datenbank- oder Anbieterarbeiten die Aufgabe dieses Handbuchs und bitten Sie ihn, `AGENTS.md`, `.ai/PROJECT_CONTEXT.md` und passende `.ai/`-Spiegel zu lesen; Überprüfen Sie die hier genannten genauen Quelldateien. Listen Sie Dateien auf und prüfen Sie sie vor der Bearbeitung. Bewahren Sie den Arbeitsbereichseigentum und die Nur-Server-Geheimnisse. und zeige dir den Unterschied. Teilen Sie ihm das gewünschte Verhalten, Eingabe- und Ausgabefelder, zulässige Rollen, erwartete Erfolge und Fehler sowie das Testkonto, den Anbieter oder das Gerät mit. Beispielwerte verwenden; Fügen Sie niemals ein echtes Geheimnis ein.

[Bevor Sie beginnen](https://supastack.dev/de/docs/web/before-you-start.md)

[Terminal-Grundlagen](https://supastack.dev/de/docs/web/terminal-basics.md)

[Lokales Web-Setup](https://supastack.dev/de/docs/web/ship-in-5-minutes.md)

[Agentenaufforderungen und Projektspeicher](https://supastack.dev/de/docs/web/agents.md)


## Speicher für Rate Limits auswählen

`RATE_LIMIT_STORE` ist entweder `memory` oder `postgres`. Wenn der Wert nicht gesetzt ist, wählt die Produktion Postgres und andere Umgebungen wählen Memory. Gemeinsame Zeilen in `rate_limit_bucket` koordinieren mehrere Server; bei Speicherausfällen wird derzeit offen fehlgeschlagen, um die API-Verfügbarkeit zu erhalten.

Limits für Workspace-/Benutzer-KI-Einreichungen und das Rate Limit der öffentlichen API/MCP schützen getrennte Oberflächen. Bewahre beim Hinzufügen von Routen die vorhandenen Bucket-Schlüssel pro Aufrufer bei.


## Nur kontrollierten Proxy-Hops vertrauen

`TRUSTED_PROXY_COUNT` liegt zwischen 0 und 10 und zählt Reverse-Proxys, die `x-forwarded-for` anhängen. Null vertraut keinem Proxy und verwendet ein gemeinsames unbekanntes Bucket; bei einem kontrollierten Proxy ist typischerweise 1 nötig. Eine falsche Anzahl erlaubt nicht vertrauenswürdigen weitergeleiteten Werten, das Rate Limit zu beeinflussen.


## Ausgaben für anonyme Provider begrenzen

`PUBLIC_AI_DAILY_BUDGET_MICROUNITS=0` deaktiviert öffentliche KI-Aufrufe. Eine konfigurierte, nichtnegative tägliche UTC-Obergrenze reserviert Plattformbudget vor Provider-Aufrufen und ist vom Budget jedes Workspace getrennt. Teste parallele Reservierungen, Grenzen beim Zurücksetzen und die Ablehnung vor jedem kostenpflichtigen Provider-Aufruf.

```
RATE_LIMIT_STORE=postgres
TRUSTED_PROXY_COUNT=1
PUBLIC_AI_DAILY_BUDGET_MICROUNITS=0
```


## Einrichtung und Konfiguration

rate-limit-runtime stellt geteilte Limiter bereit, die in die missbrauchsanfälligen Flächen verdrahtet sind — apiV1Limiter (600 Anfragen/Minute) und authLimiter (300 Anfragen/Minute) sind die ausgelieferten Presets. Limits keyen auf Identität plus Route-Bucket und antworten mit einem retrybaren 429 samt Retry-After statt einem generischen Fehler.

Erweitere den bestehenden Limiter auf neue missbrauchsanfällige Endpunkte — Sign-in, OTP, Checkout, Task-Submission, Key-Erstellung — statt pro Route eigene Zähler zu erfinden, die auseinanderdriften.

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


## Implementierungsablauf

Wähle den Key sorgfältig: pro Nutzer für authentifizierte Aktionen, pro API-Key für öffentlichen Traffic, pro IP nur als letzte Instanz für anonyme Endpunkte. Legitime Bursts bekommen ein Retry-After; Angriffe treffen auf eine harte Obergrenze.

Halte den Limiter auf missbrauchsanfälligen Routen fail-closed — ist der Store unerreichbar, lehne lieber teure Arbeit ab, als sie unbegrenzt durchzulassen.


## Überprüfung und Fehlerbehebung

Reize einen Limiter, bis er 429 mit sinnvollem Retry-After liefert, verifiziere unabhängige Buckets pro Workspace und bestätige, dass ein Burst nach dem Fenster wieder erfolgreich ist. Logge Ablehnungen ohne sensitive Payloads des Requests.


## Weiter

[KI und Hintergrundjobs](https://supastack.dev/de/docs/modules/ai.md)
