Routing, Rewriting, Auth — einmal deklariert.
Eine Policy-Datei beschreibt, wie jeder Request an deinen Tunnel behandelt wird. In Git versioniert, zur Compile-Zeit validiert, in unter drei Sekunden an jeden PoP propagiert.
Eine Policy-Datei liest sich wie ein Vertrag.
Die t-Gates-DSL ist eine kleine, statisch geprüfte Sprache. Keine Magie. Keine Laufzeit-Überraschungen. Wenn sie kompiliert, deployt sie. Wenn sie deployt, routet sie korrekt — garantiert.
- ✓Im Build scheitern, nicht zur LaufzeitDer Typchecker fängt falsche Header-Referenzen und unerreichbare Regeln ab.
- ✓Hot ReloadAnwenden via Dashboard, CLI oder Git-Webhook. Keine Neustarts, keine Drops.
- ✓Jede Version zurückrollenJedes Deploy ist immutable. t-gates policy rollback ist ein Befehl.
Path, Header, Land, ASN, JSON-Body — alles nur Prädikate.
Die Matcher-Sprache ist einheitlich. Jedes Signal — aus der Request-Zeile, den Headern, dem Body, den Verbindungsmetadaten — komponiert sich zu denselben booleschen Ausdrücken.
- ✓Geo- & ASN-MatcherMaxMind-Daten wöchentlich aktualisiert. ASN-Listen von PeeringDB.
- ✓JSONPath auf BodiesNach Request-Body routen, ohne in deiner App zu parsen.
- ✓Eigene ClaimsAuf JWT-Claims, mTLS-Subject, Session-Attribute matchen.
Gleiches Ergebnis. Halb so viele Zeilen. Kein Regex-Schmerz.
Realistische A/B-Routing-Regel, mit Auth und Rate-Limiting.
map $http_x_tier $rate {
default "60r/m";
premium "600r/m";
}
limit_req_zone $binary_remote_addr
zone=tier:10m rate=$rate;
location ~ ^/api/v1/(.*)$ {
auth_request /_oidc;
limit_req zone=tier burst=20;
if ($http_user_agent ~* "bot") {
return 403;
}
proxy_pass http://upstream/$1;
proxy_set_header X-Trace $request_id;
}route "/api/v1/*" {
auth = oidc("auth.t.gate")
rate_limit = match {
req.header("x-tier") == "premium" => "600/min"
else => "60/min"
}
deny if req.ua.is_bot
headers.add("x-trace", req.id)
}Zwölf Verben decken jede Routing-Entscheidung ab.
Komponiere sie. Überschreibe sie pro Route. Vererbe über Umgebungen hinweg.
rewrite
Path- und Header-Rewrites mit Capture-Gruppen.
rewrite /v1/* → /v2/$1auth
OIDC, JWT, mTLS, API-Key — ein einziges Schlüsselwort.
auth = jwt(jwks_url)rate_limit
Token-Bucket pro IP, Nutzer, Header oder Ausdruck.
100/min/usercache
Edge-Cache mit stale-while-revalidate, Purge nach Tag.
cache = edge(60)geo_allow
ISO-3166 allow/deny, ASN-Blocklisten.
geo_deny = ["RU"]retry
Idempotente Retries mit exponentiellem Backoff.
retry = 3 backoff=expoPolicies liegen neben deinem Code.
Verbinde ein Repo, zeige auf einen Ordner, und t-Gates beobachtet neue Commits. Jeder PR bekommt eine Preview-Umgebung mit der neuen Policy auf einer Kopie deines Traffics.
- ✓PR-PreviewsJeder PR spiegelt Live-Traffic zu 1 %, damit du Response-Formen diffen kannst.
- ✓Pflicht-ReviewerProduktions-Policies hinter GitHub CODEOWNERS sperren.
- ✓Audit-TrailJedes Deploy verweist zurück auf Commit, Autor und Reviewer.
Das Ziel ist, Routing aus der nginx.conf ins Code-Review zu verlagern. Jede Routing-Änderung wird zum PR mit Typprüfung und Preview-Umgebung, statt einer handgepflegten Config auf einer Live-Box.
Bring jede Routing-Regel in die Versionskontrolle.
Hör auf, dich um 2 Uhr nachts in Proxies einzuloggen. Hör auf, YAML von Hand zu editieren. Liefere Policies aus, wie du Code auslieferst.