Zum Inhalt springen
OmniRoute source

🌐 OmniRoute Proxy Guide (Deutsch)


Viele KI-Anbieter beschrĂ€nken den Zugriff nach geografischer Region. Entwickler in Russland, China, Iran, Kuba, der TĂŒrkei und anderen LĂ€ndern stoßen auf Fehler wie:

unsupported_country_region_territory

Auch außerhalb gesperrter Regionen sind Proxys fĂŒr Folgendes nĂŒtzlich:

Anwendungsfall Beschreibung
Umgehung geografischer Sperren Zugriff auf OpenAI, Anthropic, Codex und Copilot aus gesperrten LĂ€ndern
IP-Rotation Anfragen auf mehrere IPs verteilen, um Ratenbegrenzungen zu vermeiden
Datenschutz Ihre tatsÀchliche IP-Adresse vor vorgelagerten Anbietern verbergen
Compliance Datenverkehr durch bestimmte RechtsrÀume leiten
Tests Anfragen aus verschiedenen Regionen simulieren

┌───────────────────────────────────────────────────────────────┐
│ OmniRoute-Server │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ Proxy- │ │ Proxy- │ │ Proxy- │ │
│ │ Registry │───▶│ Dispatcher │───▶│ Fetch (undici) │ │
│ │ (SQLite) │ │ (gecacht) │ │ │ │
│ └─────────────┘ └──────────────┘ └────────┬─────────┘ │
│ â–Č │ │
│ │ â–Œ │
│ ┌──────┮──────┐ ┌──────────────────┐ │
│ │ 1proxy-Sync │ │ Vorgelagerte │ │
│ │ (kostenloser│ │ Anbieter-API │ │
│ │ Pool) │ │ │ │
│ └─────────────┘ └──────────────────┘ │
└───────────────────────────────────────────────────────────────┘
Komponente Datei Aufgabe
Proxy-Registry src/lib/db/proxies.ts CRUD fĂŒr Proxy-EintrĂ€ge und Bereichszuweisungen
Proxy-Dispatcher open-sse/utils/proxyDispatcher.ts Erstellt undici-ProxyAgent-/SOCKS-Dispatcher mit Caching
Proxy-Fetch open-sse/utils/proxyFetch.ts Umschließt fetch() und bindet einen Proxy-Dispatcher ein
Einstellungsroute src/app/api/settings/proxy/route.ts Legacy-API zur Proxy-Konfiguration (GET/PUT/DELETE)
Verwaltungsroute src/app/api/v1/management/proxies/route.ts Registry-CRUD-API (GET/POST/PATCH/DELETE)
1proxy-Datenbank src/lib/db/oneproxy.ts Persistenz fĂŒr den kostenlosen Proxy-Marktplatz

OmniRoute unterstĂŒtzt die Proxy-Konfiguration auf vier unabhĂ€ngigen Ebenen, die nach PrioritĂ€t aufgelöst werden:

PrioritĂ€tsreihenfolge der Auflösung (höchste → niedrigste):
1. đŸ”” Konto-/Verbindungs-Proxy → pro API-SchlĂŒssel/OAuth-Verbindung
2. 🟡 Anbieter-Proxy → pro Anbieter (z. B. gesamter OpenAI-Datenverkehr)
3. 🟠 Kombinations-Proxy → pro Kombinations-/Routing-Konfiguration
4. 🟱 Globaler Proxy → gesamter Datenverkehr, alle Anbieter

Wenn OmniRoute eine Anfrage an einen Upstream-Anbieter sendet, ruft es resolveProxyForConnectionFromRegistry() auf, wodurch jede Ebene der Reihe nach geprĂŒft wird:

  1. Kontoebene — Ist dieser spezifischen Verbindungs-ID ein Proxy zugewiesen?
  2. Anbieterebene — Ist diesem Anbieter (z. B. openai) ein Proxy zugewiesen?
  3. Globale Ebene — Ist ein globaler Proxy konfiguriert?
  4. Kein Proxy — Direkte Verbindung zum Anbieter.

Der erste Treffer wird verwendet. Das bedeutet, dass Sie einen globalen Proxy als RĂŒckfalloption festlegen und ihn fĂŒr bestimmte Anbieter oder Verbindungen ĂŒberschreiben können.

Datenverkehrstyp Über Proxy? Hinweise
Chat-VervollstĂ€ndigungen ✅ Alle /v1/chat/completions-Anfragen
Einbettungen ✅ /v1/embeddings
Bilderzeugung ✅ /v1/images/generations
Audio (TTS/STT) ✅ /v1/audio/*
OAuth-Token-Austausch ✅ Behebt unsupported_country_region_territory
Verbindungstests ✅ Die SchaltflĂ€che „Verbindung testen“ verwendet den Proxy
Token-Aktualisierung ✅ OAuth-Erneuerung im Hintergrund
Modellsynchronisierung ✅ Modellauflistung und -erkennung

Die Proxy-Registry ist eine SQLite-Tabelle (proxy_registry), in der alle Ihre Proxys gespeichert werden. Jeder Proxy verfĂŒgt ĂŒber folgende Felder:

Feld Typ Beschreibung
id UUID Eindeutige Kennung
name String Benutzerfreundliche Bezeichnung
type String Protokoll: http, https, socks5
host String Proxy-Hostname oder -IP-Adresse
port Integer Portnummer
username String Benutzername fĂŒr die Authentifizierung (verschlĂŒsselt gespeichert)
password String Passwort fĂŒr die Authentifizierung (verschlĂŒsselt gespeichert)
region String Bezeichnung der geografischen Region
notes String Freitextnotizen
status String active oder inactive
source String manual oder oneproxy

Über das Dashboard:

  1. Navigieren Sie zu Einstellungen → Proxy
  2. Klicken Sie auf Proxy hinzufĂŒgen
  3. Geben Sie Typ, Host, Port und optional die Anmeldedaten ein
  4. Speichern Sie die Angaben

Über die API:

Terminal-Fenster
curl -X POST http://localhost:20128/api/v1/management/proxies \
-H "Content-Type: application/json" \
-d '{
"name": "US Proxy",
"type": "http",
"host": "proxy.example.com",
"port": 8080,
"username": "user",
"password": "pass",
"region": "US"
}'
Terminal-Fenster
curl -X PATCH http://localhost:20128/api/v1/management/proxies \
-H "Content-Type: application/json" \
-d '{
"id": "proxy-uuid-here",
"host": "new-proxy.example.com",
"port": 9090
}'

Hinweis: Anmeldedaten bleiben erhalten, sofern Sie nicht ausdrĂŒcklich nicht leere Ersatzwerte senden. Wenn Sie leere Zeichenfolgen fĂŒr username/password senden, bleiben die gespeicherten Werte erhalten.

Terminal-Fenster
# SchlÀgt fehl, wenn der Proxy einer Ebene zugewiesen ist
curl -X DELETE "http://localhost:20128/api/v1/management/proxies?id=proxy-uuid"
# Erzwingt das Löschen (entfernt auch Zuweisungen)
curl -X DELETE "http://localhost:20128/api/v1/management/proxies?id=proxy-uuid&force=1"
Terminal-Fenster
curl "http://localhost:20128/api/v1/management/proxies?limit=50&offset=0"
Terminal-Fenster
# Der globalen Ebene zuweisen
curl -X PUT http://localhost:20128/api/settings/proxy \
-H "Content-Type: application/json" \
-d '{"level": "global", "proxy": {"type":"http","host":"proxy.example.com","port":8080}}'
# Einem bestimmten Anbieter zuweisen
curl -X PUT http://localhost:20128/api/settings/proxy \
-H "Content-Type: application/json" \
-d '{"level": "provider", "id": "openai", "proxy": {"type":"socks5","host":"socks.example.com","port":1080}}'
# Einer bestimmten Verbindung/einem bestimmten SchlĂŒssel zuweisen
curl -X PUT http://localhost:20128/api/settings/proxy \
-H "Content-Type: application/json" \
-d '{"level": "key", "id": "connection-uuid", "proxy": {"type":"http","host":"key-proxy.com","port":3128}}'

PrĂŒfen Sie, welcher Proxy fĂŒr eine bestimmte Verbindung verwendet wĂŒrde:

Terminal-Fenster
curl "http://localhost:20128/api/settings/proxy?resolve=connection-uuid"

Gibt den ermittelten Proxy mit seiner Ebene (account, provider oder global) und Quelle zurĂŒck.

Weisen Sie einen Proxy gleichzeitig mehreren Anbietern oder Verbindungen zu:

Terminal-Fenster
curl -X POST http://localhost:20128/api/v1/management/proxies/bulk-assign \
-H "Content-Type: application/json" \
-d '{
"scope": "provider",
"scopeIds": ["openai", "anthropic", "codex"],
"proxyId": "proxy-uuid"
}'

Proxys sind im Sicherungs-/Wiederherstellungssystem enthalten. Wenn Sie Ihre OmniRoute-Konfiguration exportieren:

  1. Navigieren Sie zu Dashboard → Einstellungen → Sicherung
  2. Klicken Sie auf Exportieren — die Proxy-Registry und die Zuweisungen sind enthalten
  3. Klicken Sie zum Wiederherstellen auf Importieren und laden Sie die Sicherungsdatei hoch

Die Proxy-Registry unterstĂŒtzt außerdem Upserts anhand von Host+Port — wenn Sie einen bereits vorhandenen Proxy importieren (gleicher Host und Port), wird dieser aktualisiert, anstatt ein Duplikat zu erstellen.

Wenn Sie Proxys in einer Ă€lteren Version (vor EinfĂŒhrung der Registry) konfiguriert haben, migriert OmniRoute diese automatisch:

Veralteter key_value-Speicher → proxy_registry + proxy_assignments

Dies erfolgt einmalig beim ersten Start nach dem Upgrade. Verwenden Sie migrateLegacyProxyConfigToRegistry({ force: true }), um die Migration erneut auszufĂŒhren.


🆕 Beigetragen von @oyi77 — PR #1847 (Issue #1788)

OmniRoute ist in die Community-Plattform 1proxy integriert und bietet Zugriff auf Hunderte kostenlose, validierte Proxys aus aller Welt. Dies ist ideal fĂŒr Benutzer, die keine eigene Proxy-Infrastruktur besitzen.

┌─────────────┐ Synchronisieren ┌─────────────────┐ Rotieren ┌──────────────┐
│ 1proxy API │ ────────────────▶ │ proxy_registry │ ──────────▶ │ Anbieter-API │
│ (extern) │ bis zu 500 │ source=oneproxy │ nach │ │
└─────────────┘ Proxys └─────────────────┘ QualitĂ€t └──────────────┘
  1. Synchronisieren — OmniRoute ruft validierte Proxys von der 1proxy API ab
  2. Speichern — Proxys werden in derselben Tabelle proxy_registry mit source = 'oneproxy' gespeichert
  3. Filtern — Nach Protokoll, Land und QualitĂ€tsbewertung filtern
  4. Rotieren — Den besten Proxy anhand einer qualitĂ€tsbasierten, zufĂ€lligen oder sequenziellen Strategie auswĂ€hlen
  5. Automatisch herabstufen — Bei fehlgeschlagenen Proxys wird die QualitĂ€tsbewertung reduziert; unterhalb des Schwellenwerts → als inaktiv markiert

Über das Dashboard:

  1. Navigieren Sie zur Registerkarte Settings → 1proxy
  2. Klicken Sie auf „Sync Now“
  3. Zeigen Sie Statistiken an: Gesamtzahl der Proxys, Anzahl aktiver Proxys, durchschnittliche QualitĂ€t und AufschlĂŒsselung nach Land

Über die API:

Terminal-Fenster
# Synchronisierung auslösen
curl -X POST http://localhost:20128/api/settings/oneproxy \
-H "Content-Type: application/json" \
-d '{}'
# Antwort:
# { "success": true, "added": 127, "updated": 45, "failed": 2, "total": 172 }
Terminal-Fenster
# Nach Protokoll filtern
curl "http://localhost:20128/api/settings/oneproxy?protocol=socks5"
# Nach Land filtern
curl "http://localhost:20128/api/settings/oneproxy?countryCode=US"
# Nach minimaler QualitÀtsbewertung filtern
curl "http://localhost:20128/api/settings/oneproxy?minQuality=80"
# Filter kombinieren
curl "http://localhost:20128/api/settings/oneproxy?protocol=http&countryCode=DE&minQuality=70"

Jeder Proxy von 1proxy enthÀlt Metadaten:

Feld Beschreibung
qualityScore Bewertung von 0–100 aus der 1proxy-Validierung
latencyMs Gemessene Netzwerklatenz
anonymity transparent, anonymous oder elite
googleAccess Gibt an, ob der Proxy auf Google-Dienste zugreifen kann
countryCode Zweistelliger ISO-LĂ€ndercode
lastValidated Zeitstempel der letzten Validierung

QualitÀtsbewertungen werden dynamisch angepasst:

  • Fehlgeschlagene Anfragen reduzieren die Bewertung um 10 Punkte
  • Bewertung sinkt auf ≀10 → Proxy wird als inactive markiert
  • Inaktive Proxys werden von der Rotation ausgeschlossen
Terminal-Fenster
# Nach QualitĂ€t rotieren (bester Proxy zuerst) — Standard
curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \
-H "Content-Type: application/json" \
-d '{"strategy": "quality"}'
# ZufÀllige Rotation
curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \
-d '{"strategy": "random"}'
# Sequenziell (zuletzt am lÀngsten nicht validierter Proxy zuerst)
curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \
-d '{"strategy": "sequential"}'

Die 1proxy-Synchronisierung verfĂŒgt ĂŒber einen integrierten Circuit Breaker:

  • Nach 5 aufeinanderfolgenden Synchronisierungsfehlern werden weitere Synchronisierungsversuche blockiert
  • ZurĂŒcksetzen mit: resetOneproxyCircuitBreaker() oder durch einen Neustart des Servers
  • Der Synchronisierungsstatus ist unter GET /api/settings/oneproxy?action=status verfĂŒgbar
Terminal-Fenster
# Einen einzelnen 1proxy-Proxy löschen
curl -X DELETE "http://localhost:20128/api/settings/oneproxy?id=proxy-uuid"
# ALLE 1proxy-Proxys löschen (manuelle Proxys bleiben unberĂŒhrt)
curl -X DELETE "http://localhost:20128/api/settings/oneproxy?clearAll=1"

OmniRoute leitet den Datenverkehr nicht nur ĂŒber einen Proxy — es lĂ€sst ihn auch legitim erscheinen:

Verwendet wreq-js, um browserÀhnliche TLS-Fingerprints zu erzeugen und dadurch Bot-Erkennungssysteme zu umgehen, die TLS-Handshakes von Nicht-Browsern kennzeichnen.

Der CLI-Fingerprint-Schalter (Einstellungen → Sicherheit) ordnet HTTP-Header und Felder im JSON-Textkörper neu an, um exakt der Signatur nativer CLI-BinĂ€rdateien (Claude Code, Codex usw.) zu entsprechen. Dies funktioniert zusĂ€tzlich zum Proxy:

Ihre IP (blockiert) → Proxy-IP (USA) → Anbieter-API
+ TLS-Spoofing
+ CLI-Fingerprint

Sie erhalten gleichzeitig sowohl IP-Maskierung als auch AuthentizitÀt der Anfragen.

Farbcodierte Badges im Dashboard zeigen an, welche Proxy-Ebene aktiv ist:

Badge Ebene Bedeutung
🟱 Global Der gesamte Datenverkehr lĂ€uft ĂŒber diesen Proxy
🟡 Anbieter Nur der Datenverkehr dieses Anbieters wird weitergeleitet
đŸ”” Verbindung Dieser spezifische SchlĂŒssel/dieses Konto verwendet diesen Proxy

Das Badge zeigt zur ÜberprĂŒfung außerdem die aufgelöste Proxy-IP an.


FĂŒr Anbieter, die das CLIProxyAPI-Muster verwenden, unterstĂŒtzt OmniRoute drei Upstream-Proxy-Modi:

Modus Beschreibung
native OmniRoute ĂŒbernimmt das Proxy-Routing direkt (Standard)
cliproxyapi Delegiert an eine externe CLIProxyAPI-Instanz
fallback Versucht zuerst den nativen Modus und greift auf CLIProxyAPI zurĂŒck

Konfiguration pro Anbieter:

Terminal-Fenster
curl -X PUT "http://localhost:20128/api/upstream-proxy/openai" \
-H "Content-Type: application/json" \
-d '{"mode": "native", "enabled": true}'

  • Konfiguration des globalen Proxys (einmalig fĂŒr den gesamten Datenverkehr festlegen)
  • Anbieterspezifische Proxy-Überschreibungen
  • Verbindungsspezifische Proxy-Zuweisungen
  • Verbindungstest ĂŒber den konfigurierten Proxy
  • Farbcodierte Badges, die die aktive Proxy-Ebene anzeigen
  • SchaltflĂ€che Jetzt synchronisieren, um kostenlose Proxys abzurufen
  • Statistikkarten: Gesamt, Aktiv, Durchschnittliche QualitĂ€t, Letzte Synchronisierung
  • Filter: Protokoll, LĂ€ndercode, MindestqualitĂ€t
  • Proxy-Tabelle mit Host, Protokoll, Land, QualitĂ€tsbewertung, Latenz, AnonymitĂ€t und Google-Zugriff
  • Synchronisierungsstatus mit Nachverfolgung von Erfolgen/Fehlern und Anzahl aufeinanderfolgender Fehler
  • Alle löschen, um sĂ€mtliche 1proxy-EintrĂ€ge zu entfernen

Methode Endpunkt Beschreibung
GET /api/settings/proxy VollstÀndige Proxy-Konfiguration abrufen
GET /api/settings/proxy?level=global Globalen Proxy abrufen
GET /api/settings/proxy?level=provider&id=openai Anbieter-Proxy abrufen
GET /api/settings/proxy?resolve=connectionId Effektiven Proxy auflösen
PUT /api/settings/proxy Proxy-Konfiguration aktualisieren
DELETE /api/settings/proxy?level=provider&id=openai Proxy auf dieser Ebene entfernen
Methode Endpunkt Beschreibung
GET /api/v1/management/proxies Alle Proxys auflisten
GET /api/v1/management/proxies?id=uuid Proxy anhand der ID abrufen
GET /api/v1/management/proxies?id=uuid&where_used=1 Proxy-Zuweisungen abrufen
POST /api/v1/management/proxies Proxy erstellen
PATCH /api/v1/management/proxies Proxy aktualisieren
DELETE /api/v1/management/proxies?id=uuid Proxy löschen
DELETE /api/v1/management/proxies?id=uuid&force=1 Löschen erzwingen
POST /api/v1/management/proxies/bulk-assign Massenzuweisung durchfĂŒhren
GET /api/v1/management/proxies/assignments Zuweisungen auflisten
GET /api/v1/management/proxies/health Proxy-Zustandsstatistiken abrufen

Informationen dazu, wie Sie Ihre OmniRoute-Instanz im öffentlichen Internet verfĂŒgbar machen können (Cloudflare/ngrok/Tailscale), anstatt ausgehenden Datenverkehr ĂŒber einen Proxy zu leiten, finden Sie unter TUNNELS_GUIDE.md. Die Tunnel-REST-API befindet sich unter /api/tunnels/{cloudflared,ngrok,tailscale}/* und ist unabhĂ€ngig von der oben dokumentierten ausgehenden Proxy-Kette.

Methode Endpunkt Beschreibung
GET /api/settings/oneproxy 1proxy-Proxys auflisten
GET /api/settings/oneproxy?action=stats Statistiken und Synchronisierungsstatus abrufen
GET /api/settings/oneproxy?action=status Nur den Synchronisierungsstatus abrufen
POST /api/settings/oneproxy Synchronisierung auslösen
POST /api/settings/oneproxy/rotate Zum nÀchsten Proxy wechseln
DELETE /api/settings/oneproxy?id=uuid Einzelnen Eintrag löschen
DELETE /api/settings/oneproxy?clearAll=1 Alle EintrÀge löschen
Methode Endpunkt Beschreibung
GET /api/upstream-proxy/:providerId Upstream-Proxy-Konfiguration abrufen
PUT /api/upstream-proxy/:providerId Upstream-Proxy-Modus festlegen
DELETE /api/upstream-proxy/:providerId Upstream-Proxy-Konfiguration entfernen

Variable Standardwert Beschreibung
ENABLE_SOCKS5_PROXY true SOCKS5-Proxy-UnterstĂŒtzung aktivieren (Standardwert true in .env.example)

Setzen Sie ENABLE_SOCKS5_PROXY=true in Ihrer .env-Datei und starten Sie neu.

Dies ist bei gĂŒnstigen Proxys, die inaktive Verbindungen trennen, normal. OmniRoute behandelt dies bereits folgendermaßen:

  • Keep-Alive wird fĂŒr Proxy-Verbindungen deaktiviert (keepAliveTimeout: 1)
  • Pipelining wird deaktiviert (pipelining: 0)
  • Dispatcher werden zwischengespeichert, um wiederholte Handshakes zu vermeiden

Falls das Problem weiterhin besteht, verwenden Sie einen anderen Proxy oder die Rotationsfunktion von 1proxy.

„unsupported_country_region_territory“ wĂ€hrend OAuth

Abschnitt betitelt „„unsupported_country_region_territory“ wĂ€hrend OAuth“

Stellen Sie sicher, dass der Proxy konfiguriert ist, bevor Sie den OAuth-Ablauf starten. OmniRoute leitet den Austausch von OAuth-Token ĂŒber den konfigurierten Proxy. Legen Sie zunĂ€chst einen globalen oder anbieterspezifischen Proxy fest und stellen Sie anschließend die Verbindung her.

ÜberprĂŒfen Sie die Auflösungsreihenfolge:

  1. PrĂŒfen Sie sie mit GET /api/settings/proxy?resolve=your-connection-id
  2. PrĂŒfen Sie, ob der Proxy-status auf active (nicht inactive) gesetzt ist
  3. Stellen Sie sicher, dass der Geltungsbereich der Proxy-Zuweisung mit Ihrer Verbindung ĂŒbereinstimmt

PrĂŒfen Sie den Synchronisierungsstatus:

Terminal-Fenster
curl "http://localhost:20128/api/settings/oneproxy?action=status"

Wenn consecutiveFailures >= 5 gilt, wurde der Schutzschalter ausgelöst. Starten Sie den Server neu, um ihn zurĂŒckzusetzen, oder warten Sie auf eine manuelle ZurĂŒcksetzung.


CREATE TABLE proxy_registry (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
type TEXT NOT NULL DEFAULT 'http',
host TEXT NOT NULL,
port INTEGER NOT NULL,
username TEXT DEFAULT '',
password TEXT DEFAULT '',
region TEXT,
notes TEXT,
status TEXT DEFAULT 'active',
source TEXT NOT NULL DEFAULT 'manual', -- 'manual' oder 'oneproxy'
quality_score INTEGER, -- 0–100 (nur 1proxy)
latency_ms INTEGER, -- Millisekunden (nur 1proxy)
anonymity TEXT, -- transparent/anonymous/elite
google_access INTEGER DEFAULT 0, -- Zugriff auf Google möglich? (1proxy)
last_validated TEXT, -- ISO-Zeitstempel (1proxy)
country_code TEXT, -- zweistelliger ISO-Code (1proxy)
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE TABLE proxy_assignments (
id INTEGER PRIMARY KEY AUTOINCREMENT,
proxy_id TEXT NOT NULL REFERENCES proxy_registry(id),
scope TEXT NOT NULL, -- 'global', 'provider', 'account', 'combo'
scope_id TEXT, -- Anbieter-ID, Verbindungs-ID oder Kombinations-ID
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
UNIQUE(scope, scope_id)
);

Der Proxy-Fast-Fail-Mechanismus von OmniRoute (src/lib/proxyHealth.ts) erkennt nicht erreichbare Proxys durch eine schnelle TCP-VerbindungsprĂŒfung in <2s und speichert das Ergebnis anschließend zwischen, um zusĂ€tzlichen Aufwand bei jeder Anfrage zu vermeiden.

Anfrage ──▶ ProxyHealthCache.get(url)
│
├─ Cache-Treffer + aktuell? ──▶ zwischengespeicherten Status zurĂŒckgeben
│
└─ Cache-Fehltreffer / veraltet? ──▶ TCP-Verbindung zu host:port herstellen
(ZeitĂŒberschreitung: FAST_FAIL_TIMEOUT_MS)
──▶ fĂŒr HEALTH_CACHE_TTL_MS zwischenspeichern
──▶ Ergebnis zurĂŒckgeben

Ohne diesen Mechanismus wĂŒrde ein nicht erreichbarer Proxy jede Anfrage fĂŒr die gesamte Dauer von PROXY_TIMEOUT_MS (standardmĂ€ĂŸig 30s) blockieren, bevor sie fehlschlĂ€gt.

Variable Standardwert Zweck
PROXY_FAST_FAIL_TIMEOUT_MS 2000 TCP-VerbindungszeitĂŒberschreitung pro ZustandsprĂŒfung
PROXY_HEALTH_CACHE_TTL_MS 30000 Dauer der Zwischenspeicherung eines Zustandsergebnisses

Empfohlene Werte:

Szenario Fast-Fail-ZeitĂŒberschreitung Cache-TTL BegrĂŒndung
API-Gateway mit hohem Durchsatz 1500ms 60000ms Aggressives schnelles Fehlschlagen, lĂ€ngerer Cache zur Reduzierung der PrĂŒfungen
Geografisch verteilte Knoten 3000ms 15000ms Langsamere Netzwerke benötigen mehr Zeit; kĂŒrzerer Cache fĂŒr schnelles Failover
Entwicklung/Test 1000ms 10000ms Schnelle Iteration mit lokalen Proxys
Tarnung/Erkennungsvermeidung 2500ms 45000ms Schnelle Abfragen vermeiden, die Ratenbegrenzungen auslösen könnten
import { getAllProxyHealthStatuses, invalidateProxyHealth } from "omniroute/proxyHealth";
const statuses = getAllProxyHealthStatuses();
for (const s of statuses) {
console.log(`${s.proxyUrl} → healthy=${s.healthy}, stale=${s.stale}`);
}
// Erneute PrĂŒfung eines bestimmten Proxys erzwingen
invalidateProxyHealth("http://user:pass@203.0.113.7:8080");

Das Flag stale ist true, wenn der Cache-Eintrag HEALTH_CACHE_TTL_MS ĂŒberschritten hat und die nĂ€chste Anfrage eine erneute PrĂŒfung auslöst.

Die ZustandsprĂŒfung verwendet abhĂ€ngig vom URL-Schema sinnvolle Standardwerte:

Schema Standardport
http:// 8080
https:// 443
socks5:// / socks5h:// 1080

Benutzerdefinierte Ports in der URL (http://host:9999) haben stets Vorrang vor dem Standardwert des Schemas.


OmniRoute erfasst die Nutzung pro Proxy, damit Betreiber Routing-Muster, Latenzspitzen und wiederkehrende Fehler diagnostizieren können.

FĂŒr jede Anfrage ĂŒber einen konfigurierten Proxy zeichnet OmniRoute Folgendes auf:

Metrik Beschreibung
proxy_url VollstÀndige Proxy-URL (Anmeldedaten maskiert)
provider ID des Upstream-Anbieters (openai, anthropic usw.)
latency_ms Gesamte Umlaufzeit einschließlich Proxy-Handshake
connect_ms Nur die Dauer des TCP-Verbindungsaufbaus
status HTTP-Statuscode vom Upstream
error Fehlerklasse, falls die Anfrage fehlgeschlagen ist
timestamp ISO 8601 UTC
Terminal-Fenster
# Neueste Proxy-Ereignisse
curl -H "Authorization: Bearer $OMNIROUTE_KEY" \
"http://localhost:20128/api/usage/proxy-logs?limit=100"

Der tatsĂ€chliche Endpunkt ist /api/usage/proxy-logs (siehe src/app/api/usage/proxy-logs/route.ts). Dieser Endpunkt unterstĂŒtzt:

  • GET /api/usage/proxy-logs — Proxy-Protokolle abrufen
  • DELETE /api/usage/proxy-logs — alle Proxy-Protokolle löschen

Aggregierte Statistiken können bei Bedarf direkt per SQL aus der Tabelle proxy_logs abgefragt werden. Die Dashboard-BenutzeroberflÀche kann aggregierte Ansichten bereitstellen.

Einen instabilen Proxy erkennen (wechselt zwischen Erfolg und Fehlschlag):

SELECT proxy_url,
COUNT(*) AS total,
SUM(CASE WHEN status >= 500 THEN 1 ELSE 0 END) AS errors,
ROUND(100.0 * SUM(CASE WHEN status >= 500 THEN 1 ELSE 0 END) / COUNT(*), 1) AS error_pct
FROM proxy_logs
WHERE timestamp > datetime('now', '-1 hour')
GROUP BY proxy_url
HAVING error_pct > 5
ORDER BY error_pct DESC;

Langsame Proxys finden (p95-Latenz > 2 s):

WITH ranked AS (
SELECT proxy_url, latency_ms,
PERCENT_RANK() OVER (PARTITION BY proxy_url ORDER BY latency_ms) AS pct
FROM proxy_logs
WHERE timestamp > datetime('now', '-24 hour')
)
SELECT proxy_url, latency_ms
FROM ranked
WHERE pct >= 0.95
ORDER BY latency_ms DESC;

Wenn einem Geltungsbereich mehrere Proxys zugewiesen sind, verwendet OmniRoute eine Rotationsstrategie, um auszuwĂ€hlen, welcher Proxy fĂŒr die jeweilige Anfrage verwendet wird. Die Strategie wird auf Ebene des Geltungsbereichs konfiguriert (global, pro Anbieter, pro Konto, pro Kombination).

Strategie Empfohlener Einsatzbereich AbwÀgung
quality (Standard) Produktion mit Proxys unterschiedlicher QualitÀt Bevorzugt hoch bewertete Proxys; kann niedrig bewertete benachteiligen
random Lastverteilung, Datenschutz GleichmĂ€ĂŸige Verteilung; ignoriert QualitĂ€tssignale
sequential Debugging, deterministische Tests DurchlÀuft Proxys der Reihe nach; leicht nachvollziehbar
VerfĂŒgen Ihre Proxys ĂŒber QualitĂ€tsbewertungen?
│
┌───────────┮───────────┐
│ │
JA NEIN
│ │
Sind alle Proxys │
qualitativ ungefĂ€hr │
gleichwertig? │
│ │
┌────┮────┐ │
│ │ │
JA NEIN `random`
│ │ verwenden
│ │ (gleichmĂ€ĂŸige
│ │ Verteilung baut
│ │ mit der Zeit
│ │ QualitĂ€tsdaten auf)
│ │
│ `quality` verwenden
│ (am besten bei
│ gemischter QualitĂ€t)
│
`random` verwenden
(Last gleichmĂ€ĂŸig
verteilen)

Der 1proxy-Marktplatz-Pool stuft ausgefallene Proxys bereits automatisch herab (siehe Proxy-QualitĂ€tsbewertungen). FĂŒr Proxys, die Sie zur Registry hinzugefĂŒgt haben, bietet der Hintergrund-Scheduler fĂŒr ZustandsprĂŒfungen (src/lib/proxyHealth/scheduler.ts) dasselbe Verhalten zum automatischen Ausschließen eines ausgefallenen Mitglieds aus der Kette, ohne etwas zu löschen:

Terminal-Fenster
# .env — einen Proxy nach 3 aufeinanderfolgenden fehlgeschlagenen PrĂŒfungen vorĂŒbergehend deaktivieren und
# ihn automatisch wieder aktivieren, sobald er erneut auf PrĂŒfungen antwortet.
PROXY_AUTO_DISABLE=true
PROXY_AUTO_REMOVE_AFTER=3

So funktioniert dies in einer Kette mit mehreren Proxys:

  1. Der Scheduler prĂŒft jeden registrierten Proxy alle PROXY_HEALTH_INTERVAL_MS (standardmĂ€ĂŸig 10 Min.; mindestens 1 Min.).
  2. Nach PROXY_AUTO_REMOVE_AFTER aufeinanderfolgenden eindeutigen Fehlern (einem tatsĂ€chlichen Verbindungsfehler – ein Timeout oder ein eigener 5xx-Fehler des PrĂŒfungsziels zĂ€hlt nie, siehe Proxy-ZustandsprĂŒfung) wird der status des Proxys auf dead gesetzt.
  3. dead ist einer der Statuswerte, die der bei der Pool-/Rotationsauflösung verwendete Aktivstatusfilter ausschließt. Daher weist die Rotation eines Geltungsbereichs (Round-Robin / zufĂ€llig / persistent / Latenz – siehe Entscheidungsbaum fĂŒr Rotationsstrategien) diesen Proxy sofort keinen neuen Anfragen mehr zu. Andere Proxys im Pool sind davon nicht betroffen, und der gesamte Pool greift niemals unbemerkt auf eine direkte Verbindung zurĂŒck – siehe die Fail-Closed-Schutzvorrichtung im 4-stufigen Proxy-System.
  4. Der Scheduler prĂŒft dead-Proxys weiterhin im selben Intervall. Bei der nĂ€chsten erfolgreichen PrĂŒfung wird der status wieder auf active gesetzt und der Proxy erneut in die Rotation aufgenommen – ein manuelles erneutes HinzufĂŒgen ist nicht erforderlich.

Dies ist bewusst optional und nicht destruktiv: StandardmĂ€ĂŸig zĂ€hlt und protokolliert der Scheduler lediglich Fehler (siehe Richtlinie C in decision.ts), und PROXY_AUTO_DISABLE löscht niemals eine Zeile – dafĂŒr ist das separate, aggressivere Flag PROXY_AUTO_REMOVE vorgesehen. Wenn beide auf true gesetzt sind, hat PROXY_AUTO_REMOVE Vorrang (bei einem Proxy, der ohnehin gelöscht wird, ist eine zwischenzeitliche vorĂŒbergehende Deaktivierung nicht sinnvoll). Die vollstĂ€ndige Variablenliste finden Sie in der Referenz zur Umgebungskonfiguration.


📖 Verwandte Dokumentation:


OmniRoute-Quellcode (a58000c7685f)

HagiCode

HagiCode ist ein agentischer Coding-Arbeitsplatz mit strukturierten Workflows, Multi-Agent-AusfĂŒhrung und Hero-Dungeon-Ansichten.

Mit einem intelligenteren, schnelleren und unterhaltsameren agentischen Workflow wird aus Ideen nutzbare Software.

HagiCode-HauptoberflÀche im hellen Design
  • SmartStrukturierte Workflows machen aus Absichten einen umsetzbaren Weg von der Idee bis zur Auslieferung.
  • EfficientMulti-Agent-Workflows fĂŒhren Recherche, Umsetzung und PrĂŒfung parallel aus.
  • FunHero Dungeon macht lange Coding-Sitzungen anschaulich und gemeinschaftlich.
HagiCode besuchen