Skip to content

Latest commit

 

History

History
819 lines (608 loc) · 42.3 KB

PROXY_GUIDE.md

File metadata and controls

819 lines (608 loc) · 42.3 KB

🌐 OmniRoute Proxy Guide (Türkçe)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇧🇦 bs · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Coğrafi engelleri aşın, kimliğinizi koruyun ve AI trafiğini herhangi bir proxy üzerinden yönlendirin — üstelik hiçbir yapılandırma karmaşası olmadan.

OmniRoute; üst sağlayıcı AI trafiğini HTTP, HTTPS veya SOCKS5 proxy'leri üzerinden yönlendirmenize olanak tanıyan, tüm özelliklere sahip bir proxy yönetim sistemi içerir. İster engellenmiş bir bölgede olun, ister IP rotasyonuna ihtiyaç duyun ya da gizli parmak izi oluşturmak isteyin — bu kılavuz ihtiyacınız olan her şeyi kapsar.


İçindekiler


Neden Proxy Kullanılmalı?

Birçok AI sağlayıcısı erişimi coğrafi bölgeye göre kısıtlar. Rusya, Çin, İran, Küba, Türkiye ve diğer ülkelerdeki geliştiriciler aşağıdakine benzer hatalarla karşılaşır:

unsupported_country_region_territory

Proxy'ler, engellenmiş bölgelerin dışında da şu amaçlarla kullanılabilir:

Kullanım Alanı Açıklama
Coğrafi engel aşma Engellenmiş ülkelerden OpenAI, Anthropic, Codex ve Copilot'a erişme
IP rotasyonu Hız sınırlamasından kaçınmak için istekleri birden fazla IP'ye dağıtma
Gizlilik Gerçek IP adresinizi üst sağlayıcılardan gizleme
Uyumluluk Trafiği belirli yargı bölgeleri üzerinden yönlendirme
Test Farklı bölgelerden gelen istekleri simüle etme

Mimariye Genel Bakış

┌───────────────────────────────────────────────────────────────┐
│                       OmniRoute Sunucusu                      │
│                                                               │
│  ┌─────────────┐    ┌──────────────┐    ┌──────────────────┐  │
│  │ Proxy       │    │ Proxy        │    │ Proxy            │  │
│  │ Kayıt       │───▶│ Dağıtıcı     │───▶│ Fetch (undici)   │  │
│  │ Defteri     │    │ (önbellekli) │    │                  │  │
│  │ (SQLite)    │    │              │    │                  │  │
│  └─────────────┘    └──────────────┘    └────────┬─────────┘  │
│         ▲                                        │            │
│         │                                        ▼            │
│  ┌──────┴──────┐                        ┌──────────────────┐  │
│  │ 1proxy      │                        │ Üst Sağlayıcı    │  │
│  │ Senkroniz.  │                        │ API'si           │  │
│  │ (ücr. havuz)│                        │                  │  │
│  └─────────────┘                        └──────────────────┘  │
└───────────────────────────────────────────────────────────────┘

Temel Bileşenler

Bileşen Dosya Rol
Proxy Kayıt Defteri src/lib/db/proxies.ts Proxy girdileri ve kapsam atamaları için CRUD işlemleri
Proxy Dağıtıcısı open-sse/utils/proxyDispatcher.ts Önbelleğe alma özelliğiyle undici ProxyAgent/SOCKS dağıtıcıları oluşturur
Proxy Fetch open-sse/utils/proxyFetch.ts Proxy dağıtıcısı ekleyerek fetch() işlevini sarmalar
Ayarlar Rotası src/app/api/settings/proxy/route.ts Eski proxy yapılandırma API'si (GET/PUT/DELETE)
Yönetim Rotası src/app/api/v1/management/proxies/route.ts Kayıt defteri CRUD API'si (GET/POST/PATCH/DELETE)
1proxy Veritabanı src/lib/db/oneproxy.ts Ücretsiz proxy pazarı kalıcılığı

4 Seviyeli Proxy Sistēmi

OmniRoute, öncelik sırasına göre çözümlenen dört bağımsız kapsamda proxy yapılandırmasını destekler:

Öncelik Çözümleme Sırası (en yüksek → en düşük):

  1. 🔵 Hesap/Bağlantı Proxy'si  →  API anahtarı / OAuth bağlantısı başına
  2. 🟡 Sağlayıcı Proxy'si       →  sağlayıcı başına (ör. tüm OpenAI trafiği)
  3. 🟠 Kombinasyon Proxy'si     →  kombinasyon/yönlendirme yapılandırması başına
  4. 🟢 Global Proxy             →  tüm trafik, tüm sağlayıcılar

Çözümleme Nasıl Çalışır?

OmniRoute, üst sağlayıcıya bir istek gönderdiğinde her seviyeyi sırayla kontrol eden resolveProxyForConnectionFromRegistry() fonksiyonunu çağırır:

  1. Hesap seviyesi — Bu belirli bağlantı kimliğine atanmış bir proxy var mı?
  2. Sağlayıcı seviyesi — Bu sağlayıcıya (ör. openai) atanmış bir proxy var mı?
  3. Global seviye — Yapılandırılmış bir global proxy var mı?
  4. Proxy yok — Sağlayıcıya doğrudan bağlantı.

İlk eşleşme kullanılır. Bu, global bir proxy'yi yedek seçenek olarak ayarlayabileceğiniz ancak belirli sağlayıcılar veya bağlantılar için bunu geçersiz kılabileceğiniz anlamına gelir.

Proxy Üzerinden Yönlendirilenler

Trafik Türü Proxy Kullanılıyor mu? Notlar
Sohbet tamamlamaları ✅ Tüm /v1/chat/completions istekleri
Embedding'ler ✅ /v1/embeddings
Görsel oluşturma ✅ /v1/images/generations
Ses (TTS/STT) ✅ /v1/audio/*
OAuth belirteci değişimi ✅ unsupported_country_region_territory sorununu çözer
Bağlantı testleri ✅ "Bağlantıyı Test Et" düğmesi proxy kullanır
Belirteç yenileme ✅ Arka planda OAuth yenilemesi
Model senkronizasyonu ✅ Model listeleme ve keşfetme

Proxy Kayıt Defteri (CRUD)

Proxy kayıt defteri, tüm proxy'lerinizi depolayan bir SQLite tablosudur (proxy_registry). Her proxy aşağıdaki alanlara sahiptir:

Alan Tür Açıklama
id UUID Benzersiz tanımlayıcı
name String İnsan tarafından okunabilir etiket
type String Protokol: http, https, socks5
host String Proxy ana bilgisayar adı veya IP adresi
port Integer Bağlantı noktası numarası
username String Kimlik doğrulama kullanıcı adı (beklemede şifrelenmiş)
password String Kimlik doğrulama parolası (beklemede şifrelenmiş)
region String Coğrafi bölge etiketi
notes String Serbest metin notları
status String active veya inactive
source String manual veya oneproxy

Proxy Oluşturma

Kontrol Paneli Üzerinden:

  1. Ayarlar → Proxy bölümüne gidin
  2. Proxy Ekle seçeneğine tıklayın
  3. Tür, ana bilgisayar, bağlantı noktası ve isteğe bağlı kimlik doğrulama bilgilerini doldurun
  4. Kaydedin

API Üzerinden:

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"
  }'

Proxy Güncelleme

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
  }'

Not: Açıkça boş olmayan yeni değerler göndermediğiniz sürece kimlik bilgileri korunur. username/password için boş dizeler gönderildiğinde depolanan değerler korunur.

Proxy Silme

# Proxy herhangi bir kapsama atanmışsa başarısız olur
curl -X DELETE "http://localhost:20128/api/v1/management/proxies?id=proxy-uuid"

# Zorla silme (atamaları da kaldırır)
curl -X DELETE "http://localhost:20128/api/v1/management/proxies?id=proxy-uuid&force=1"

Proxy'leri Listeleme

curl "http://localhost:20128/api/v1/management/proxies?limit=50&offset=0"

Proxy'leri Kapsamlara Atama

# Global kapsama ata
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}}'

# Belirli bir sağlayıcıya ata
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}}'

# Belirli bir bağlantıya/anahtara ata
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}}'

Etkin Proxy'yi Çözümleme

Belirli bir bağlantı için hangi proxy'nin kullanılacağını kontrol edin:

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

Çözümlenen proxy'yi seviyesi (account, provider veya global) ve kaynağıyla birlikte döndürür.

Toplu Atama

Tek bir proxy'yi aynı anda birden fazla sağlayıcıya veya bağlantıya atayın:

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"
  }'

İçe/Dışa Aktarma

Proxy'ler Yedekleme/Geri Yükleme sistemine dahildir. OmniRoute yapılandırmanızı dışa aktardığınızda:

  1. Kontrol Paneli → Ayarlar → Yedekleme bölümüne gidin
  2. Dışa Aktar seçeneğine tıklayın — proxy kayıt defteri ve atamalar dahil edilir
  3. Geri yüklemek için İçe Aktar seçeneğine tıklayın ve yedekleme dosyasını yükleyin

Proxy kayıt defteri ayrıca host+port değerlerine göre upsert işlemini destekler — zaten mevcut olan bir proxy'yi (aynı ana bilgisayar ve bağlantı noktasıyla) içe aktarırsanız kopya oluşturmak yerine mevcut proxy'yi günceller.

Eski Sistemden Geçiş

Proxy'leri daha eski bir sürümde (registry öncesi) yapılandırdıysanız OmniRoute bunları otomatik olarak taşır:

Eski key_value deposu → proxy_registry + proxy_assignments

Bu işlem, yükseltmeden sonraki ilk başlatmada bir kez gerçekleşir. Yeniden çalıştırmak için migrateLegacyProxyConfigToRegistry({ force: true }) kullanın.


1proxy Ücretsiz Proxy Pazarı

🆕 @oyi77 tarafından katkıda bulunulmuştur — PR #1847 (Sorun #1788)

OmniRoute, dünyanın dört bir yanından yüzlerce ücretsiz, doğrulanmış proxy'ye erişim sağlamak için 1proxy topluluk platformuyla entegre olur. Bu, kendi proxy altyapısına sahip olmayan kullanıcılar için idealdir.

Nasıl Çalışır?

┌─────────────┐   Senkronize Et   ┌─────────────────┐    Döndür     ┌───────────┐
│  1proxy API │ ─────────────────▶ │  proxy_registry  │ ────────────▶ │ Sağlayıcı │
│   (harici)  │  500 proxy'ye kadar│  source=oneproxy │ kaliteye göre │    API     │
└─────────────┘                    └─────────────────┘                └───────────┘
  1. Senkronize et — OmniRoute, doğrulanmış proxy'leri 1proxy API'sinden alır
  2. Sakla — Proxy'ler aynı proxy_registry tablosuna source = 'oneproxy' ile kaydedilir
  3. Filtrele — Protokole, ülkeye ve kalite puanına göre filtreleyin
  4. Döndür — Kalite, rastgele veya sıralı stratejileri kullanarak en iyi proxy'yi seçin
  5. Otomatik düşürme — Başarısız proxy'lerin kalite puanı düşürülür; eşik değerin altına düşenler → etkin değil olarak işaretlenir

Proxy'leri Senkronize Etme

Kontrol Paneli Üzerinden:

  1. Ayarlar → 1proxy sekmesine gidin
  2. "Şimdi Senkronize Et" düğmesine tıklayın
  3. İstatistikleri görüntüleyin: toplam proxy sayısı, etkin proxy sayısı, ortalama kalite ve ülkelere göre dağılım

API Üzerinden:

# Senkronizasyonu tetikle
curl -X POST http://localhost:20128/api/settings/oneproxy \
  -H "Content-Type: application/json" \
  -d '{}'

# Yanıt:
# { "success": true, "added": 127, "updated": 45, "failed": 2, "total": 172 }

Proxy'leri Filtreleme

# Protokole göre filtrele
curl "http://localhost:20128/api/settings/oneproxy?protocol=socks5"

# Ülkeye göre filtrele
curl "http://localhost:20128/api/settings/oneproxy?countryCode=US"

# Minimum kalite puanına göre filtrele
curl "http://localhost:20128/api/settings/oneproxy?minQuality=80"

# Filtreleri birleştir
curl "http://localhost:20128/api/settings/oneproxy?protocol=http&countryCode=DE&minQuality=70"

Proxy Kalite Puanları

Her 1proxy proxy'si meta verilerle birlikte gelir:

Alan Açıklama
qualityScore 1proxy doğrulamasından alınan 0-100 arası puan
latencyMs Ölçülen ağ gecikmesi
anonymity transparent, anonymous veya elite
googleAccess Proxy'nin Google hizmetlerine erişip erişemediği
countryCode İki harfli ISO ülke kodu
lastValidated Son doğrulamanın zaman damgası

Kalite puanları dinamik olarak ayarlanır:

  • Başarısız istekler puanı 10 azaltır
  • Puan ≤10'a düşerse → proxy inactive olarak işaretlenir
  • Etkin olmayan proxy'ler döndürme işlemine dahil edilmez

Döndürme Stratejileri

# Kaliteye göre döndür (önce en iyi proxy) — varsayılan
curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \
  -H "Content-Type: application/json" \
  -d '{"strategy": "quality"}'

# Rastgele döndürme
curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \
  -d '{"strategy": "random"}'

# Sıralı (önce en uzun süredir doğrulanmamış olan)
curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \
  -d '{"strategy": "sequential"}'

Devre Kesici

1proxy senkronizasyonunda yerleşik bir devre kesici bulunur:

  • Art arda 5 senkronizasyon hatasından sonra diğer senkronizasyon girişimleri engellenir
  • Şununla sıfırlayın: resetOneproxyCircuitBreaker() veya sunucuyu yeniden başlatın
  • Senkronizasyon durumu GET /api/settings/oneproxy?action=status adresinden alınabilir

1proxy Proxy'lerini Temizleme

# Tek bir 1proxy proxy'sini sil
curl -X DELETE "http://localhost:20128/api/settings/oneproxy?id=proxy-uuid"

# TÜM 1proxy proxy'lerini temizle (manuel proxy'lere dokunulmaz)
curl -X DELETE "http://localhost:20128/api/settings/oneproxy?clearAll=1"

Algılama Önleme ve Gizlilik

OmniRoute, trafiği yalnızca bir proxy üzerinden yönlendirmekle kalmaz — trafiğin meşru görünmesini de sağlar:

TLS Parmak İzi Sahteciliği

Tarayıcı benzeri TLS parmak izleri oluşturmak için wreq-js kullanarak tarayıcı dışı TLS el sıkışmalarını işaretleyen bot algılama sistemlerini atlatır.

CLI Parmak İzi Eşleştirme

CLI Parmak İzi Anahtarı (Ayarlar → Güvenlik), HTTP başlıklarını ve JSON gövde alanlarını yerel CLI ikili dosyalarının (Claude Code, Codex vb.) imzasıyla tam olarak eşleşecek şekilde yeniden sıralar. Bu özellik, proxy'nin üzerine ek olarak çalışır:

IP adresiniz (engellenmiş) → Proxy IP'si (ABD) → Sağlayıcı API'si
                              + TLS sahteciliği
                              + CLI parmak izi

Aynı anda hem IP maskeleme hem de istek özgünlüğü elde edersiniz.

Proxy IP'sini Koruma

Kontrol panelindeki renk kodlu rozetler, hangi proxy düzeyinin etkin olduğunu gösterir:

Rozet Düzey Anlamı
🟢 Genel Tüm trafik bu proxy üzerinden geçer
🟡 Sağlayıcı Yalnızca bu sağlayıcının trafiği proxy'den geçer
🔵 Bağlantı Bu belirli anahtar/hesap bu proxy'yi kullanır

Rozet ayrıca doğrulama için çözümlenen proxy IP'sini de gösterir.


Yukarı Akış Proxy Modları

CLIProxyAPI kalıbını kullanan sağlayıcılar için OmniRoute üç yukarı akış proxy modunu destekler:

Mod Açıklama
native OmniRoute, proxy yönlendirmesini doğrudan yönetir (varsayılan)
cliproxyapi Harici bir CLIProxyAPI örneğine devreder
fallback Önce yerel modu dener, başarısız olursa CLIProxyAPI'ye geçer

Her sağlayıcı için ayrı ayrı yapılandırın:

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

Kontrol Paneli Kullanıcı Arayüzü

Ayarlar → Proxy Sekmesi

  • Genel proxy yapılandırması (tüm trafik için bir kez ayarlanır)
  • Sağlayıcı başına proxy geçersiz kılmaları
  • Bağlantı başına proxy atamaları
  • Yapılandırılmış proxy üzerinden bağlantı testi
  • Etkin proxy düzeyini gösteren renk kodlu rozetler

Ayarlar → 1proxy Sekmesi

  • Ücretsiz proxy'leri almak için Şimdi Senkronize Et düğmesi
  • İstatistik kartları: Toplam, Etkin, Ort. Kalite, Son Senkronizasyon
  • Filtreler: Protokol, Ülke Kodu, Min. Kalite
  • Ana makine, protokol, ülke, kalite puanı, gecikme, anonimlik ve Google erişimini içeren proxy tablosu
  • Başarı/başarısızlık takibi ve ardışık başarısızlık sayısını içeren senkronizasyon durumu paneli
  • Tüm 1proxy girdilerini kaldırmak için Tümünü Temizle

API Referansı

Proxy Ayarları API'si

Yöntem Uç Nokta Açıklama
GET /api/settings/proxy Tam proxy yapılandırmasını getirir
GET /api/settings/proxy?level=global Genel proxy'yi getirir
GET /api/settings/proxy?level=provider&id=openai Sağlayıcı proxy'sini getirir
GET /api/settings/proxy?resolve=connectionId Etkin proxy'yi çözümler
PUT /api/settings/proxy Proxy yapılandırmasını günceller
DELETE /api/settings/proxy?level=provider&id=openai İlgili düzeydeki proxy'yi kaldırır

Proxy Kayıt API'si

Yöntem Uç Nokta Açıklama
GET /api/v1/management/proxies Tüm proxy'leri listeler
GET /api/v1/management/proxies?id=uuid Proxy'yi kimliğine göre getirir
GET /api/v1/management/proxies?id=uuid&where_used=1 Proxy atamalarını getirir
POST /api/v1/management/proxies Proxy oluşturur
PATCH /api/v1/management/proxies Proxy'yi günceller
DELETE /api/v1/management/proxies?id=uuid Proxy'yi siler
DELETE /api/v1/management/proxies?id=uuid&force=1 Zorla siler
POST /api/v1/management/proxies/bulk-assign Toplu atama yapar
GET /api/v1/management/proxies/assignments Atamaları listeler
GET /api/v1/management/proxies/health Proxy sağlık istatistikleri

Tüneller API'si

OmniRoute örneğinizi, giden trafiği bir proxy üzerinden yönlendirmek yerine herkese açık internete açmak (Cloudflare/ngrok/Tailscale) için TUNNELS_GUIDE.md belgesine bakın. Tünel REST API'si /api/tunnels/{cloudflared,ngrok,tailscale}/* altında bulunur ve yukarıda belgelenen giden proxy zincirinden bağımsızdır.

1proxy API'si

Yöntem Uç Nokta Açıklama
GET /api/settings/oneproxy 1proxy proxy'lerini listeler
GET /api/settings/oneproxy?action=stats İstatistikleri ve senkronizasyon durumunu getirir
GET /api/settings/oneproxy?action=status Yalnızca senkronizasyon durumunu getirir
POST /api/settings/oneproxy Senkronizasyonu tetikler
POST /api/settings/oneproxy/rotate Sonraki proxy'ye geçer
DELETE /api/settings/oneproxy?id=uuid Birini siler
DELETE /api/settings/oneproxy?clearAll=1 Tümünü temizler

Yukarı Akış Proxy API'si

Yöntem Uç Nokta Açıklama
GET /api/upstream-proxy/:providerId Yukarı akış proxy yapılandırmasını getirir
PUT /api/upstream-proxy/:providerId Yukarı akış proxy modunu ayarlar
DELETE /api/upstream-proxy/:providerId Yukarı akış proxy yapılandırmasını kaldırır

Ortam Değişkenleri

Değişken Varsayılan Açıklama
ENABLE_SOCKS5_PROXY true SOCKS5 proxy desteğini etkinleştirir (.env.example içinde varsayılan değer true)

Sorun Giderme

"SOCKS5 proxy devre dışı"

.env dosyanızda ENABLE_SOCKS5_PROXY=true olarak ayarlayın ve yeniden başlatın.

Proxy üzerinden "socket hang up" hataları

Bu, boşta kalan bağlantıları sonlandıran ucuz proxy'lerde normaldir. OmniRoute bunu zaten şu yöntemlerle ele alır:

  • Proxy bağlantılarında keep-alive özelliğini devre dışı bırakarak (keepAliveTimeout: 1)
  • Pipelining özelliğini devre dışı bırakarak (pipelining: 0)
  • Tekrarlanan el sıkışmalarını önlemek için dispatcher'ları önbelleğe alarak

Sorun devam ederse farklı bir proxy deneyin veya 1proxy rotasyon özelliğini kullanın.

OAuth sırasında "unsupported_country_region_territory"

OAuth akışını başlatmadan önce proxy'nin yapılandırıldığından emin olun. OmniRoute, OAuth token alışverişini yapılandırılmış proxy üzerinden yönlendirir. Önce global veya sağlayıcı düzeyinde bir proxy ayarlayın, ardından bağlanın.

Proxy kullanılmıyor

Çözümleme sırasını kontrol edin:

  1. GET /api/settings/proxy?resolve=your-connection-id ile doğrulayın
  2. Proxy status değerinin active (inactive değil) olup olmadığını kontrol edin
  3. Proxy atama kapsamının bağlantınızla eşleştiğinden emin olun

1proxy senkronizasyonu başarısız oluyor

Senkronizasyon durumunu kontrol edin:

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

consecutiveFailures >= 5 ise devre kesici tetiklenmiştir. Sıfırlamak için sunucuyu yeniden başlatın veya manuel olarak sıfırlanmasını bekleyin.


Veritabanı Şeması

proxy_registry Tablosu

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' veya 'oneproxy'
  quality_score INTEGER,                     -- 0-100 (yalnızca 1proxy)
  latency_ms INTEGER,                        -- milisaniye (yalnızca 1proxy)
  anonymity TEXT,                            -- şeffaf/anonim/elit
  google_access INTEGER DEFAULT 0,           -- Google'a erişebilir mi? (1proxy)
  last_validated TEXT,                       -- ISO zaman damgası (1proxy)
  country_code TEXT,                         -- ISO 2 harfli kod (1proxy)
  created_at TEXT NOT NULL,
  updated_at TEXT NOT NULL
);

proxy_assignments Tablosu

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' veya 'combo'
  scope_id TEXT,              -- sağlayıcı kimliği, bağlantı kimliği veya combo kimliği
  created_at TEXT NOT NULL,
  updated_at TEXT NOT NULL,
  UNIQUE(scope, scope_id)
);

Proxy Sağlık Kontrolü (v3.8.16+)

OmniRoute'un proxy hızlı hata verme mekanizması (src/lib/proxyHealth.ts), hızlı bir TCP bağlantı kontrolüyle çalışmayan proxy'leri <2 saniye içinde algılar ve ardından istek başına ek yükü önlemek için sonucu önbelleğe alır.

Nasıl Çalışır?

İstek ──▶ ProxyHealthCache.get(url)
          │
          ├─ Önbellek isabeti + güncel?  ──▶ önbelleğe alınmış durumu döndür
          │
          └─ Önbellekte yok / eski?       ──▶ host:port adresine TCP bağlantısı kur
                                              (zaman aşımı: FAST_FAIL_TIMEOUT_MS)
                                              ──▶ HEALTH_CACHE_TTL_MS süresince önbelleğe al
                                              ──▶ sonucu döndür

Bu olmadan çalışmayan bir proxy, başarısız olmadan önce her isteği PROXY_TIMEOUT_MS süresinin tamamı boyunca (varsayılan 30 saniye) engellerdi.

Ayarlanabilir Ortam Değişkenleri

Değişken Varsayılan Amaç
PROXY_FAST_FAIL_TIMEOUT_MS 2000 Sağlık kontrolü başına TCP bağlantı zaman aşımı
PROXY_HEALTH_CACHE_TTL_MS 30000 Sağlık sonucunun önbellekte tutulma süresi

Önerilen değerler:

Senaryo Hızlı hata verme zaman aşımı Önbellek TTL'si Gerekçe
Yüksek işlem hacimli API ağ geçidi 1500ms 60000ms Agresif hızlı hata verme, kontrolleri azaltmak için daha uzun önbellek
Coğrafi olarak dağıtılmış düğümler 3000ms 15000ms Daha yavaş ağlar daha fazla zamana ihtiyaç duyar; hızlı yük devri için daha kısa önbellek
Geliştirme / test 1000ms 10000ms Yerel proxy'lerde hızlı yineleme
Gizlilik / algılama önleme 2500ms 45000ms Hız sınırlarını tetikleyebilecek hızlı yoklamalardan kaçınma

Proxy Sağlığını İnceleme

import { getAllProxyHealthStatuses, invalidateProxyHealth } from "omniroute/proxyHealth";

const statuses = getAllProxyHealthStatuses();
for (const s of statuses) {
  console.log(`${s.proxyUrl} → healthy=${s.healthy}, stale=${s.stale}`);
}

// Belirli bir proxy'yi yeniden kontrol etmeye zorla
invalidateProxyHealth("http://user:pass@203.0.113.7:8080");

Önbellek girdisi HEALTH_CACHE_TTL_MS süresini aştığında stale bayrağı true olur ve sonraki istek yeni bir kontrolü tetikler.

Proxy Türüne Göre Varsayılanlar

Sağlık kontrolü, URL şemasına göre uygun varsayılan değerleri kullanır:

Şema Varsayılan port
http:// 8080
https:// 443
socks5:// / socks5h:// 1080

URL'deki özel portlar (http://host:9999) her zaman şema varsayılanına göre önceliklidir.


Proxy Analitiği ve Gözlemlenebilirlik

OmniRoute, operatörlerin yönlendirme kalıplarını, gecikme artışlarını ve yinelenen hataları teşhis etmesine yardımcı olmak için proxy başına kullanımı izler.

İzlenen Veriler

OmniRoute, yapılandırılmış bir proxy üzerinden geçen her istek için şunları kaydeder:

Metrik Açıklama
proxy_url Tam proxy URL'si (kimlik doğrulama bilgileri maskeli)
provider Üst sağlayıcı kimliği (openai, anthropic vb.)
latency_ms Proxy el sıkışması dahil toplam gidiş-dönüş süresi
connect_ms Yalnızca TCP bağlantı süresi
status Üst sistemden gelen HTTP durum kodu
error İstek başarısız olduysa hata sınıfı
timestamp ISO 8601 UTC

Verilere Erişme

# Son proxy olayları
curl -H "Authorization: Bearer $OMNIROUTE_KEY" \
  "http://localhost:20128/api/usage/proxy-logs?limit=100"

Asıl uç nokta /api/usage/proxy-logs'dur (bkz. src/app/api/usage/proxy-logs/route.ts). Bu uç nokta şunları destekler:

  • GET /api/usage/proxy-logs — proxy günlüklerini getirir
  • DELETE /api/usage/proxy-logs — tüm proxy günlüklerini temizler

Gerekirse toplu istatistikler, SQL aracılığıyla doğrudan proxy_logs tablosundan sorgulanabilir. Kontrol paneli arayüzü toplu görünümler sunabilir.

Yaygın Kalıplar

Kararsız bir proxy'yi tespit etme (başarı ve başarısızlık arasında gidip gelir):

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;

Yavaş proxy'leri bulma (p95 gecikmesi > 2 sn.):

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;

Döndürme Stratejisi Karar Ağacı

Bir kapsama birden fazla proxy atandığında OmniRoute, her istek için hangisinin kullanılacağını seçmek üzere bir döndürme stratejisi kullanır. Strateji kapsam düzeyinde yapılandırılır (genel, sağlayıcı başına, hesap başına, kombinasyon başına).

Kullanılabilir Stratejiler

Strateji Kullanım durumu Ödünleşim
quality (varsayılan) Farklı kalitede proxy'lerle üretim ortamı Yüksek puanlı proxy'leri tercih eder; düşük puanlıları dışlayabilir
random Yük dağıtımı, gizlilik Eşit dağıtım sağlar; kalite sinyallerini yok sayar
sequential Hata ayıklama, deterministik test Proxy'ler arasında sırayla döner; anlaşılması kolaydır

Karar Ağacı

                    Proxy'leriniz için kalite puanlarınız var mı?
                    │
        ┌───────────┴───────────┐
        │                       │
      EVET                    HAYIR
        │                       │
   Tüm proxy'lerin             │
   kalitesi yaklaşık           │
   olarak eşit mi?             │
        │                       │
   ┌────┴────┐                  │
   │         │                  │
 EVET      HAYIR              `random`
   │         │                kullanın
   │         │              (eşit dağılım,
   │         │               zaman içinde
   │         │               kalite verisi
   │         │               oluşturur)
   │         │
   │    `quality` kullanın
   │    (farklı kalite
   │    düzeyleri için
   │    en iyisi)
   │
`random` kullanın
(yükü eşit
dağıtın)

Kendi Proxy’leriniz İçin Otomatik Hata Sonrası Devre Dışı Bırakma

1proxy pazar yeri havuzu, başarısız proxy’lerin derecesini zaten otomatik olarak düşürür (bkz. Proxy Kalite Puanları). Kayıt defterine sizin eklediğiniz proxy’ler için arka plan sağlık zamanlayıcısı (src/lib/proxyHealth/scheduler.ts), hiçbir şeyi silmeden aynı “çalışmayan bir üyeyi zincirden otomatik olarak çıkarma” davranışını sağlar:

# .env — art arda 3 başarısız yoklamadan sonra bir proxy'yi geçici olarak devre dışı bırakın;
# yoklamalara yeniden yanıt vermeye başladığında otomatik olarak tekrar etkinleştirin.
PROXY_AUTO_DISABLE=true
PROXY_AUTO_REMOVE_AFTER=3

Çoklu proxy zincirine nasıl uyduğu:

  1. Zamanlayıcı, kayıtlı her proxy’yi her PROXY_HEALTH_INTERVAL_MS aralığında yoklar (varsayılan 10 dk.; minimum 1 dk.).
  2. Art arda PROXY_AUTO_REMOVE_AFTER adet kesin başarısızlıktan sonra (gerçek bir bağlantı hatasıdır; zaman aşımı veya yoklama hedefinin kendi 5xx yanıtı hiçbir zaman sayılmaz, bkz. Proxy Sağlık Denetimi), proxy’nin status değeri dead olarak ayarlanır.
  3. dead, havuz/döndürme çözümlemesinin kullandığı etkin durum filtresinin hariç tuttuğu durumlardan biridir; bu nedenle kapsamın döndürme mekanizması (sıralı / rastgele / yapışkan / gecikme — bkz. Döndürme Stratejisi Karar Ağacı) söz konusu proxy’yi yeni isteklere vermeyi hemen durdurur. Havuzdaki diğer proxy’ler bundan etkilenmez ve havuzun tamamı hiçbir zaman sessizce doğrudan bağlantıya geri dönmez — hatada kapalı koruma mekanizması için bkz. 4 Seviyeli Proxy Sistemi.
  4. Zamanlayıcı, dead proxy’leri aynı aralıkta yoklamaya devam eder. Bir sonraki başarılı yoklama, status değerini tekrar active olarak değiştirir ve proxy yeniden döndürmeye dahil olur — manuel olarak yeniden eklemek gerekmez.

Bu davranış bilinçli olarak isteğe bağlı ve tahribatsızdır: zamanlayıcı varsayılan olarak yalnızca başarısızlıkları sayar ve günlüğe kaydeder (decision.ts içindeki C politikasına bakın); PROXY_AUTO_DISABLE hiçbir zaman bir satırı silmez — ayrı ve daha agresif olan PROXY_AUTO_REMOVE bayrağı bunun içindir. Her ikisi de true olarak ayarlanırsa PROXY_AUTO_REMOVE öncelikli olur (silinmek üzere olan bir proxy’yi arada geçici olarak devre dışı bırakmanın bir faydası yoktur). Değişkenlerin tam listesi için Ortam Yapılandırması başvuru belgesine bakın.


📖 İlgili belgeler: