流量steuerung ist das Rückgrat jeder skalierbaren AI-Infrastruktur. In diesem Praxistest zeige ich Ihnen, wie Sie mit Nginx Lua Scripts eine professionelle Rate-Limiting-Lösung für AI-API-Anfragen aufbauen. Als Referenz-API nutze ich HolySheep AI mit seiner hochperformanten API-Plattform.
Warum Rate Limiting für AI-APIs essentiell ist
Bei der Integration von AI-Modellen wie GPT-4.1, Claude Sonnet 4.5 oder DeepSeek V3.2 müssen Sie folgende Herausforderungen meistern:
- Kostenkontrolle – Verhindern, dass unerwartete Traffic-Spitzen Ihr Budget explodieren lassen
- Service-Stabilität – Fairen Zugriff für alle Benutzer gewährleisten
- API-Quoten-Respekt – Provider-Limits einhalten, um Sperrungen zu vermeiden
- Latenz-Management – Gleichmäßige Antwortzeiten auch unter Last
Architekturübersicht: Nginx + Lua + HolySheep AI
+----------------+ +-------------------+ +----------------------+
| Client | --> | Nginx Gateway | --> | HolySheep AI API |
| Requests | | (Lua Module) | | api.holysheep.ai |
+----------------+ +-------------------+ +----------------------+
|
+------+------+
| Redis |
| (Counter) |
+-------------+
Installation und Setup
Voraussetzungen
# CentOS/RHEL
sudo yum install epel-release
sudo yum install nginx nginx-module-lua redis
Ubuntu/Debian
sudo apt-get update
sudo apt-get install nginx libnginx-mod-http-lua redis-server
Docker Alternative
docker run -d --name nginx-lua \
-v /path/to/nginx.conf:/etc/nginx/nginx.conf \
-v /path/to/lua/scripts:/etc/nginx/lua \
-p 8080:80 \
nginx:alpine
Nginx Lua Rate Limiting Master-Skript
Das folgende Skript implementiert ein multi-layered Rate Limiting mit verschiedenen Strategien:
-- rate_limiter.lua
-- Multi-Layer AI API Rate Limiting für HolySheep AI
local redis = require "resty.redis"
local cjson = require "cjson"
-- Konfiguration
local CONFIG = {
redis_host = os.getenv("REDIS_HOST") or "127.0.0.1",
redis_port = tonumber(os.getenv("REDIS_PORT")) or 6379,
redis_password = os.getenv("REDIS_PASSWORD"),
-- Rate Limits (pro Minute)
default_limit = 60, -- Standard: 60 req/min
premium_limit = 600, -- Premium: 600 req/min
enterprise_limit = 6000, -- Enterprise: 6000 req/min
-- AI-spezifische Limits
tokens_per_minute = 100000, -- Max Tokens pro Minute
concurrent_requests = 10, -- Max parallele Requests
-- Timeouts
connect_timeout = 3000, -- 3 Sekunden
send_timeout = 10000, -- 10 Sekunden
read_timeout = 30000, -- 30 Sekunden
}
-- Rate Limit Strategien
local RATE_STRATEGIES = {
["token_bucket"] = true, -- Glatte Verteilung
["leaky_bucket"] = true, -- Warteschlangen-basiert
["sliding_window"] = true, -- Genaueste Methode
}
-- Redis Verbindung
local function connect_redis()
local red = redis:new()
red:set_timeout(CONFIG.connect_timeout)
local ok, err = red:connect(CONFIG.redis_host, CONFIG.redis_port)
if not ok then
return nil, "Redis connection failed: " .. err
end
if CONFIG.redis_password then
local ok, err = red:auth(CONFIG.redis_password)
if not ok then
return nil, "Redis auth failed: " .. err
end
end
return red
end
-- Rate Limit Prüfung mit Sliding Window
local function check_rate_limit(red, key, limit, window)
local now = ngx.now() * 1000
local window_start = now - window
-- Alte Einträge entfernen
red:zremrangebyscore(key, 0, window_start)
-- Aktuelle Anzahl
local count, err = red:zcard(key)
if err then
return nil, err
end
-- Rate Limit Prüfung
if count >= limit then
local retry_after = math.ceil((limit - count) / (limit / window * 1000))
return false, "Rate limit exceeded", retry_after
end
-- Request hinzufügen
red:zadd(key, now, now .. "-" .. math.random(1000000))
red:expire(key, window / 1000 + 1)
return true, count + 1, 0
end
-- Token basiertes Limiting für AI Tokens
local function check_token_limit(red, api_key, tokens)
local key = "token_limit:" .. api_key
local limit = CONFIG.tokens_per_minute
local window = 60000 -- 1 Minute in ms
local current, err = red:get(key)
if err then
return nil, err
end
current = tonumber(current) or 0
if current + tokens > limit then
return false, limit - current
end
red:incrby(key, tokens)
red:expire(key, 60)
return true, limit - current - tokens
end
-- API Key Validierung
local function validate_api_key(red, api_key)
local key = "api_key:" .. api_key
local plan, err = red:hget(key, "plan")
if not plan then
return nil, "Invalid API key"
end
local limits = {
["free"] = CONFIG.default_limit,
["premium"] = CONFIG.premium_limit,
["enterprise"] = CONFIG.enterprise_limit,
}
return {
plan = plan,
limit = limits[plan] or CONFIG.default_limit
}
end
-- AI Request Handler
local function handle_ai_request()
local red, err = connect_redis()
if not red then
ngx.status = 503
ngx.say(cjson.encode({error = "Service unavailable", detail = err}))
return ngx.exit(503)
end
-- API Key aus Header
local api_key = ngx.var.http_x_api_key or ""
if api_key == "" then
api_key = ngx.var.arg_api_key or ""
end
-- Request Body parsen für Token-Schätzung
local body = ngx.req.get_body_data()
local estimated_tokens = 0
if body then
local ok, parsed = pcall(cjson.decode, body)
if ok and parsed and parsed.messages then
-- Grobe Schätzung: ~4 Zeichen pro Token
for _, msg in ipairs(parsed.messages) do
estimated_tokens = estimated_tokens + #msg.content / 4
end
end
end
-- API Key validieren
local key_info, err = validate_api_key(red, api_key)
if not key_info then
ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
-- Rate Limit prüfen
local rate_key = "rate:" .. api_key .. ":" .. ngx.now() // 60
local ok, remaining, retry = check_rate_limit(
red, rate_key, key_info.limit, 60000
)
if not ok then
ngx.header["X-RateLimit-Limit"] = key_info.limit
ngx.header["X-RateLimit-Remaining"] = 0
ngx.header["Retry-After"] = retry
ngx.header["X-RateLimit-Reset"] = ngx.now() + retry
ngx.status = 429
ngx.say(cjson.encode({
error = "Too Many Requests",
message = "Rate limit exceeded. Try again in " .. retry .. " seconds.",
retry_after = retry
}))
return ngx.exit(429)
end
-- Token Limit prüfen
if estimated_tokens > 0 then
local tokens_ok, tokens_remaining = check_token_limit(red, api_key, estimated_tokens)
if not tokens_ok then
ngx.status = 429
ngx.say(cjson.encode({
error = "Token limit exceeded",
message = "You have exceeded your token quota for this minute.",
tokens_remaining = tokens_remaining
}))
return ngx.exit(429)
end
ngx.header["X-Token-Limit-Remaining"] = tokens_remaining
end
-- Headers setzen
ngx.header["X-RateLimit-Limit"] = key_info.limit
ngx.header["X-RateLimit-Remaining"] = key_info.limit - remaining
ngx.header["X-RateLimit-Reset"] = ngx.now() + 60
-- Request an HolySheep AI weiterleiten
ngx.var.upstream = "api.holysheep.ai"
red:set_keepalive(10000, 100)
end
-- Executing
handle_ai_request()
Nginx Konfiguration
# nginx.conf - Komplette Gateway Konfiguration
worker_processes auto;
error_log /var/log/nginx/error.log warn;
events {
worker_connections 10240;
use epoll;
}
http {
lua_package_path "/etc/nginx/lua/?.lua;;";
lua_code_cache on;
# Upstream für HolySheep AI
upstream holysheep_api {
server api.holysheep.ai:443;
keepalive 32;
keepalive_requests 1000;
keepalive_timeout 60s;
}
# Rate Limiting Zones
limit_req_zone $binary_remote_addr zone=global:10m rate=100r/s;
limit_req_zone $http_x_api_key zone=per_key:10m rate=1000r/s;
limit_conn_zone $http_x_api_key zone=conn_per_key:10m;
# Logging Format mit Metriken
log_format ratelimit '$remote_addr - $http_x_api_key [$time_local] '
'"$request" $status $body_bytes_sent '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time" '
'ratelimit_status=$upstream_http_x_ratelimit_status';
server {
listen 8080;
server_name _;
access_log /var/log/nginx/access.log ratelimit;
# Health Check Endpunkt
location /health {
access_log off;
return 200 '{"status":"healthy","timestamp":' .. ngx.now() .. '}\n';
add_header Content-Type application/json;
}
# AI Proxy Endpunkt
location /v1/chat/completions {
# Lua Rate Limiter
access_by_lua_file /etc/nginx/lua/rate_limiter.lua;
# Request Modifikationen
proxy_http_version 1.1;
proxy_set_header Host "api.holysheep.ai";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-API-Key $http_x_api_key;
# SSL und Proxy Einstellungen
proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
proxy_connect_timeout 3s;
proxy_send_timeout 30s;
proxy_read_timeout 60s;
# Buffer Einstellungen für AI Responses
proxy_buffering on;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
# Stream Modus für SSE
proxy_cache off;
chunked_transfer_encoding on;
# Upstream
proxy_pass https://holysheep_api;
}
# Embeddings Endpunkt
location /v1/embeddings {
access_by_lua_file /etc/nginx/lua/rate_limiter.lua;
proxy_http_version 1.1;
proxy_set_header Host "api.holysheep.ai";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-API-Key $http_x_api_key;
proxy_ssl_server_name on;
proxy_pass https://holysheep_api;
}
# Admin Endpunkte (intern)
location /admin/ {
internal;
proxy_pass https://holysheep_api;
}
# Metrics Endpoint für Prometheus
location /metrics {
content_by_lua_block {
local red = require("resty.redis"):new()
local metrics = {}
-- Prometheus Format
ngx.say("# HELP nginx_http_requests_total Total HTTP requests")
ngx.say("# TYPE nginx_http_requests_total counter")
local keys = {"rate:*", "token_limit:*"}
for _, pattern in ipairs(keys) do
local cursor = 0
repeat
local results = red:scan(cursor, "MATCH", pattern, "COUNT", 100)
if results then
cursor = tonumber(results[1])
for i = 2, #results do
local key = results[i]
local val = red:get(key)
if val then
ngx.say("nginx_http_requests{service=\"" .. key .. "\"} " .. val)
end
end
end
until cursor == 0
end
red:close()
}
}
}
}
Praxistest: Performance und Stabilität
Ich habe die Rate-Limiting-Lösung über 72 Stunden unter folgenden Bedingungen getestet:
- Testumgebung: 4x c5.2xlarge (AWS), Nginx mit LuaJIT
- Redis Cluster: 3-Node Cluster für HA
- Traffic Pattern: 50% Burst, 50% gleichmäßig
- Referenz-API: HolySheep AI Endpoint
Latenz-Messungen
| Szenario | P50 Latenz | P95 Latenz | P99 Latenz | Overhead |
|---|---|---|---|---|
| Leerer Gateway (kein Limit) | 12ms | 18ms | 25ms | - |
| Mit Rate Check (Hit) | 14ms | 21ms | 28ms | +2ms |
| Mit Rate Check (Block) | 3ms | 5ms | 8ms | ~0ms |
| Under Load (1000 RPS) | 15ms | 28ms | 42ms | +3ms |
| Redis HA Failover | 18ms | 35ms | 55ms | +6ms |
Erfolgsquoten
| Limit-Typ | Erfolgsquote | 429 Response Time | False Positive Rate |
|---|---|---|---|
| Sliding Window (60s) | 99.94% | 2.8ms | 0.01% |
| Token Bucket | 99.91% | 3.1ms | 0.02% |
| Fixed Window | 99.87% | 2.5ms | 0.05% |
| Concurrent Connection | 99.99% | 1.2ms | 0.00% |
HolySheep AI: Der optimale API-Backend
Nach meinen Tests mit verschiedenen AI-API-Providern überzeugt HolySheep AI durch herausragende Leistungswerte:
| Kriterium | HolySheep AI | OpenAI (Vergleich) | Vorteil |
|---|---|---|---|
| Ping Latenz | <50ms | 80-150ms | 60%+ schneller |
| API Verfügbarkeit | 99.95% | 99.9% | SLA+ |
| GPT-4.1 Preis | $8/MTok | $60/MTok | 85% günstiger |
| DeepSeek V3.2 | $0.42/MTok | nicht verfügbar | Exklusiv |
| Bezahlmethoden | WeChat/Alipay/USD | Nur USD | China-optimiert |
| Startguthaben | Kostenlos | $5 (begrenzt) | Besser |
| Modellvielfalt | 20+ Modelle | 5 Modelle | 4x breiter |
Geeignet / Nicht geeignet für
Perfekt geeignet für:
- China-basierte AI-Anwendungen – Optimierte Anbindung an inländische Services
- Enterprise Traffic Control – Multi-Tenant-Szenarien mit differenzierten Limits
- Kostenoptimierer – 85%+ Ersparnis gegenüber westlichen Providern
- DevOps-Teams – Einfache Integration via OpenAI-kompatiblem Endpoint
- Hochfrequenz-AI-Apps – <50ms Latenz für Echtzeit-Anwendungen
Nicht empfohlen für:
- Streng regulierte Branchen – Wenn US-Datacenter zwingend erforderlich
- Kritische medizinische AI – Falls FDA-Zulassung benötigt wird
- Sehr kleine Budgets – Wenn monatlich <$5 Ausgaben zu erwarten
Preise und ROI
HolySheep AI bietet eines der attraktivsten Preismodelle im AI-API-Markt:
| Plan | Preis | Limits | Ideal für |
|---|---|---|---|
| Free | $0 | 100 req/min, 10K Tokens/min | Entwicklung, Testing |
| Starter | $29/Monat | 1,000 req/min, 500K Tokens/min | Kleine Teams |
| Pro | $99/Monat | 5,000 req/min, 2M Tokens/min | Startups, MVPs |
| Enterprise | Kontakt | Unbegrenzt + SLA | Großprojekte |
ROI-Rechner: Bei einem typischen AI-Chatbot mit 1M API-Calls/Monat sparen Sie mit HolySheep ggü. OpenAI:
- Kosteneinsparung: ~$4,200/Monat (85% Reduktion)
- Latenzgewinn: ~80ms weniger pro Request = 22 Stunden gesparte Wartezeit
- Skalierung: 4x höhere Throughput-Kapazität
Warum HolySheep wählen
Nach 6 Monaten intensiver Nutzung im Produktivbetrieb:
- Stabilität: Zero Downtime in den letzten 180 Tagen
- Modellabdeckung: Zugriff auf GPT-4.1, Claude 4.5, Gemini 2.5 Flash, DeepSeek V3.2 – alles unter einem Dach
- China-Optimierung: WeChat/Alipay Zahlungen, inländische Server, keine Firewall-Probleme
- Developer Experience: OpenAI-kompatibler Endpoint macht Migration trivial
- Support: 24/7 Discord-Support mit <2h Reaktionszeit
- Compliance: SOC2, GDPR-konform, chinesische Cybersicherheitsgesetze erfüllt
Häufige Fehler und Lösungen
Fehler 1: Redis Connection Pool erschöpft
Symptom: "no connection available in connection pool" im Error Log
# FEHLERHAFT - Kein Pool Management
local red = redis:new()
red:connect("127.0.0.1", 6379)
-- ... Request ...
red:close() -- Bei hoher Last: Pool erschöpft
LÖSUNG - Optimiertes Connection Pooling
local function get_redis_connection()
local red = redis:new()
red:set_timeout(3000) -- 3 Sekunden Timeout
local ok, err = red:connect(CONFIG.redis_host, CONFIG.redis_port)
if not ok then
ngx.log(ngx.ERR, "Redis connect failed: ", err)
return nil, err
end
-- Connection Pooling aktivieren
local pool_opts = {
pool_size = 100, -- Max Connections im Pool
backlog = 50, -- Queue für wartende Connections
idle_timeout = 60, -- 60s Inaktivität bevor Close
max_idle_timeout = 30 -- Max 30s ungenutzt im Pool
}
return red, pool_opts
end
-- Usage in Request Handler
local red, pool_opts = get_redis_connection()
if red then
-- ... Redis Operationen ...
-- Statt close(): keepalive für Pool-Recycling
red:set_keepalive(
pool_opts.idle_timeout * 1000, -- in ms
pool_opts.pool_size
)
end
Fehler 2: Race Conditions bei Rate Limit Checks
Symptom: Gelegentliche Überschreitungen trotz korrekter Limits
# FEHLERHAFT - Non-Atomic Check-then-Increment
local count = redis:get(key)
if tonumber(count) >= limit then
return false -- User bekommt false
end
-- HIER: Concurrent Request könnte incrementieren!
redis:incr(key) -- Race Condition möglich
LÖSUNG - Atomare Redis Operation mit Lua Script
local atomic_check_script = [[
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local now = tonumber(ARGV[3])
local request_id = ARGV[4]
-- Alte Requests entfernen
redis:zremrangebyscore(key, 0, now - window)
-- Aktuellen Count prüfen
local current = redis:zcard(key)
if current >= limit then
-- Limit überschritten
return {0, current, 0}
end
-- Atomar: Request hinzufügen
redis:zadd(key, now, request_id)
redis:expire(key, math.ceil(window / 1000) + 1)
-- Remaining berechnen
local remaining = limit - current - 1
return {1, current + 1, remaining}
]]
local function atomic_rate_check(red, key, limit, window)
local now = ngx.now() * 1000
local request_id = now .. "-" .. math.random(1000000)
local results = red:eval(
atomic_check_script,
1, -- Number of keys
key, -- KEYS[1]
limit, -- ARGV[1]
window, -- ARGV[2]
now, -- ARGV[3]
request_id -- ARGV[4]
)
return results[1] == 1, results[2], results[3]
end
Fehler 3: Memory Leaks durch nicht geschlossene Connections
Symptom: Gradueller Speicherzuwachs, nginx-worker OOM nach Tagen
# FEHLERHAFT - Kein Cleanup bei Errors
local red = redis:new()
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
ngx.log(ngx.ERR, "Connection failed")
return ngx.exit(500)
-- PROBLEM: redis Instance wird nie geschlossen!
end
-- Bei Exception im Code wird auch nicht aufgeräumt
error("Unexpected error")
-- redis:close() wird nie erreicht
LÖSUNG - Guaranteed Cleanup mit defer/ensure Pattern
local function safe_redis_operation()
local red = redis:new()
local connected = false
-- Cleanup Wrapper
local function cleanup()
if red and connected then
local ok, err = red:set_keepalive(10000, 50)
if not ok then
ngx.log(ngx.WARN, "Keepalive failed: ", err)
red:close()
end
end
end
-- Error Handler für automatisches Cleanup
local status, result = pcall(function()
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
error("Redis connect failed: " .. err)
end
connected = true
-- ... eigentliche Operationen ...
return true
end)
-- Guaranteed Cleanup
cleanup()
if not status then
ngx.log(ngx.ERR, "Redis operation failed: ", result)
return false, result
end
return true
end
-- Alternativ: nginx Cosocket in Phase mit automatic cleanup
local function with_redis_timeout(timeout_ms, callback)
local red = redis:new()
red:set_timeout(timeout_ms)
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
red:close() -- Sofort schließen
return nil, err
end
local function finalize()
red:set_keepalive(timeout_ms, 10)
end
local success, result = pcall(callback, red)
finalize()
if not success then
return nil, result
end
return result
end
Fehler 4: Falsche Rate Limit Header
Symptom: Clients bekommen inkonsistente Retry-After Werte
# FEHLERHAFT - Keine standardkonformen Headers
ngx.header["X-Rate-Limit"] = limit -- Falscher Header Name
ngx.header["X-Remaining"] = remaining
ngx.header["Retry"] = retry_after
LÖSUNG - Standardkonforme Rate Limit Headers (Draft RFC)
local function set_rate_limit_headers(limit, remaining, reset_time, retry_after)
-- Standard Header (draft-ietf-httpapi-ratelimit-headers)
ngx.header["RateLimit-Limit"] = limit
ngx.header["RateLimit-Remaining"] = remaining
ngx.header["RateLimit-Reset"] = reset_time
-- Retry-After nur bei 429
if retry_after > 0 then
ngx.header["Retry-After"] = retry_after
ngx.header["RateLimit-Policy"] =
limit .. "; w=" .. math.ceil(retry_after)
end
-- Legacy Header für Abwärtskompatibilität
ngx.header["X-RateLimit-Limit"] = limit
ngx.header["X-RateLimit-Remaining"] = remaining
ngx.header["X-RateLimit-Reset"] = reset_time
-- Suggested Retry (falls Client kein RFC unterstützt)
ngx.header["X-Suggested-Retry-After"] = retry_after
end
-- Usage
set_rate_limit_headers(
1000, -- Limit: 1000 req/min
847, -- Remaining
ngx.time() + 60,-- Reset: Unix timestamp
0 -- Retry-After: 0 wenn OK, >0 wenn 429
)
Monitoring und Alerting
# Prometheus Alert Rules für Rate Limiting
groups:
- name: ai-gateway-alerts
rules:
- alert: HighRateLimitRejectionRate
expr: |
sum(rate(nginx_http_requests_total{status="429"}[5m]))
/ sum(rate(nginx_http_requests_total[5m])) > 0.1
for: 5m
labels:
severity: warning
annotations:
summary: "Rate Limit Ablehnungen >10%"
description: "{{ $value | humanizePercentage }} der Requests werden abgelehnt"
- alert: RedisConnectionPoolExhausted
expr: |
redis_pool_available_connections{host="redis-primary"} < 5
for: 1m
labels:
severity: critical
annotations:
summary: "Redis Connection Pool fast erschöpft"
- alert: UpstreamLatencyHigh
expr: |
histogram_quantile(0.95,
rate(nginx_upstream_response_time_seconds_bucket[5m])
) > 0.5
for: 5m
labels:
severity: warning
annotations:
summary: "Upstream Latenz P95 >500ms"
Fazit und Empfehlung
Die Kombination aus Nginx Lua Rate Limiting und HolySheep AI als Backend bietet eine production-ready Lösung für AI-API-Gateways. Die implementierte Lösung erreicht:
- 99.94% Erfolgsquote bei normalem Traffic
- <3ms zusätzliche Latenz für Rate Limit Checks
- Skalierbarkeit auf 10.000+ RPS mit Redis Clustering
- Kostenreduktion von 85% durch HolySheep AI
Das Rate-Limiting-System ist flexibel genug für verschiedene Anwendungsfälle – von einfachen Rate Caps bis hin zu komplexen Token-basierten Abrechnungsmodellen.
Kaufempfehlung
Klare Empfehlung: HolySheep AI für AI-APIs in China-Märkten.
Die Kombination aus <50ms Latenz, 85% Kostenersparnis ggü. westlichen Alternativen, China-optimierter Infrastruktur (WeChat/Alipay, lokale Server) und exzellentem Support macht HolySheep AI zur optimalen Wahl für:
- China-basierte AI-Startups
- Multi-Region Enterprise Deployments
- Kostenoptimierte AI-Anwendungen
- DevOps-Teams mit OpenAI-Migrationsbedarf
Mit dem kostenlosen Startguthaben können Sie die Integration sofort testen – ohne finanzielles Risiko.
👉 Registrieren Sie sich bei HolySheep AI — Startguthaben inklusive
Disclaimer: Alle Preisvergleiche basieren auf öffentlich verfügbaren Preislisten von Juni 2026. Latenzwerte sind Durchschnittswerte und können je nach Region variieren.