# 🌐 OmniRoute Proxy Guide (Ελληνικά) 🌐 **Languages:** 🇺🇸 [English](../../../../ops/PROXY_GUIDE.md) · 🇪🇹 [am](../../../am/docs/ops/PROXY_GUIDE.md) · 🇸🇦 [ar](../../../ar/docs/ops/PROXY_GUIDE.md) · 🇦🇿 [az](../../../az/docs/ops/PROXY_GUIDE.md) · 🇧🇬 [bg](../../../bg/docs/ops/PROXY_GUIDE.md) · 🇧🇩 [bn](../../../bn/docs/ops/PROXY_GUIDE.md) · 🇧🇦 [bs](../../../bs/docs/ops/PROXY_GUIDE.md) · 🇨🇿 [cs](../../../cs/docs/ops/PROXY_GUIDE.md) · 🇩🇰 [da](../../../da/docs/ops/PROXY_GUIDE.md) · 🇩🇪 [de](../../../de/docs/ops/PROXY_GUIDE.md) · 🇪🇸 [es](../../../es/docs/ops/PROXY_GUIDE.md) · 🇪🇪 [et](../../../et/docs/ops/PROXY_GUIDE.md) · 🇮🇷 [fa](../../../fa/docs/ops/PROXY_GUIDE.md) · 🇫🇮 [fi](../../../fi/docs/ops/PROXY_GUIDE.md) · 🇫🇷 [fr](../../../fr/docs/ops/PROXY_GUIDE.md) · 🇮🇪 [ga](../../../ga/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [gu](../../../gu/docs/ops/PROXY_GUIDE.md) · 🇳🇬 [ha](../../../ha/docs/ops/PROXY_GUIDE.md) · 🇮🇱 [he](../../../he/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [hi](../../../hi/docs/ops/PROXY_GUIDE.md) · 🇭🇷 [hr](../../../hr/docs/ops/PROXY_GUIDE.md) · 🇭🇺 [hu](../../../hu/docs/ops/PROXY_GUIDE.md) · 🇦🇲 [hy](../../../hy/docs/ops/PROXY_GUIDE.md) · 🇮🇩 [id](../../../id/docs/ops/PROXY_GUIDE.md) · 🇳🇬 [ig](../../../ig/docs/ops/PROXY_GUIDE.md) · 🇮🇹 [it](../../../it/docs/ops/PROXY_GUIDE.md) · 🇯🇵 [ja](../../../ja/docs/ops/PROXY_GUIDE.md) · 🇬🇪 [ka](../../../ka/docs/ops/PROXY_GUIDE.md) · 🇰🇭 [km](../../../km/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [kn](../../../kn/docs/ops/PROXY_GUIDE.md) · 🇰🇷 [ko](../../../ko/docs/ops/PROXY_GUIDE.md) · 🇱🇹 [lt](../../../lt/docs/ops/PROXY_GUIDE.md) · 🇱🇻 [lv](../../../lv/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [ml](../../../ml/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [mr](../../../mr/docs/ops/PROXY_GUIDE.md) · 🇲🇾 [ms](../../../ms/docs/ops/PROXY_GUIDE.md) · 🇲🇹 [mt](../../../mt/docs/ops/PROXY_GUIDE.md) · 🇲🇲 [my](../../../my/docs/ops/PROXY_GUIDE.md) · 🇳🇵 [ne](../../../ne/docs/ops/PROXY_GUIDE.md) · 🇳🇱 [nl](../../../nl/docs/ops/PROXY_GUIDE.md) · 🇳🇴 [no](../../../no/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [or](../../../or/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [pa](../../../pa/docs/ops/PROXY_GUIDE.md) · 🇵🇭 [phi](../../../phi/docs/ops/PROXY_GUIDE.md) · 🇵🇱 [pl](../../../pl/docs/ops/PROXY_GUIDE.md) · 🇵🇹 [pt](../../../pt/docs/ops/PROXY_GUIDE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/ops/PROXY_GUIDE.md) · 🇷🇴 [ro](../../../ro/docs/ops/PROXY_GUIDE.md) · 🇷🇺 [ru](../../../ru/docs/ops/PROXY_GUIDE.md) · 🇱🇰 [si](../../../si/docs/ops/PROXY_GUIDE.md) · 🇸🇰 [sk](../../../sk/docs/ops/PROXY_GUIDE.md) · 🇸🇮 [sl](../../../sl/docs/ops/PROXY_GUIDE.md) · 🇷🇸 [sr](../../../sr/docs/ops/PROXY_GUIDE.md) · 🇸🇪 [sv](../../../sv/docs/ops/PROXY_GUIDE.md) · 🇰🇪 [sw](../../../sw/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [ta](../../../ta/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [te](../../../te/docs/ops/PROXY_GUIDE.md) · 🇹🇭 [th](../../../th/docs/ops/PROXY_GUIDE.md) · 🇹🇷 [tr](../../../tr/docs/ops/PROXY_GUIDE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/ops/PROXY_GUIDE.md) · 🇵🇰 [ur](../../../ur/docs/ops/PROXY_GUIDE.md) · 🇺🇿 [uz](../../../uz/docs/ops/PROXY_GUIDE.md) · 🇻🇳 [vi](../../../vi/docs/ops/PROXY_GUIDE.md) · 🇳🇬 [yo](../../../yo/docs/ops/PROXY_GUIDE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/ops/PROXY_GUIDE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/ops/PROXY_GUIDE.md) --- > **Παρακάμψτε γεωγραφικούς αποκλεισμούς, προστατεύστε την ταυτότητά σας και δρομολογήστε την κίνηση AI μέσω οποιουδήποτε διακομιστή μεσολάβησης — χωρίς καμία πολυπλοκότητα ρύθμισης.** Το OmniRoute περιλαμβάνει ένα πλήρες σύστημα διαχείρισης διακομιστών μεσολάβησης, το οποίο σας επιτρέπει να δρομολογείτε την κίνηση προς παρόχους AI ανώτερου επιπέδου μέσω διακομιστών μεσολάβησης HTTP, HTTPS ή SOCKS5. Είτε βρίσκεστε σε αποκλεισμένη περιοχή, χρειάζεστε εναλλαγή IP είτε θέλετε απόκρυψη ψηφιακού αποτυπώματος — αυτός ο οδηγός καλύπτει τα πάντα. --- ## Πίνακας περιεχομένων - [Γιατί να χρησιμοποιήσετε διακομιστές μεσολάβησης;](#why-use-proxies) - [Επισκόπηση αρχιτεκτονικής](#architecture-overview) - [Σύστημα διακομιστών μεσολάβησης 4 επιπέδων](#4-level-proxy-system) - [Μητρώο διακομιστών μεσολάβησης (CRUD)](#proxy-registry-crud) - [Δωρεάν αγορά 1proxy](#1proxy-free-proxy-marketplace) - [Εναλλαγή διακομιστών μεσολάβησης](#proxy-rotation) - [Προστασία από εντοπισμό και απόκρυψη](#anti-detection--stealth) - [Λειτουργίες διακομιστή μεσολάβησης ανώτερου επιπέδου](#upstream-proxy-modes) - [Περιβάλλον εργασίας πίνακα ελέγχου](#dashboard-ui) - [Αναφορά API](#api-reference) - [Μεταβλητές περιβάλλοντος](#environment-variables) - [Αντιμετώπιση προβλημάτων](#troubleshooting) --- ## Γιατί να χρησιμοποιήσετε διακομιστές μεσολάβησης; Πολλοί πάροχοι AI περιορίζουν την πρόσβαση βάσει γεωγραφικής περιοχής. Οι προγραμματιστές στη **Ρωσία, την Κίνα, το Ιράν, την Κούβα, την Τουρκία** και σε άλλες χώρες αντιμετωπίζουν σφάλματα όπως: ``` unsupported_country_region_territory ``` Ακόμη και εκτός αποκλεισμένων περιοχών, οι διακομιστές μεσολάβησης είναι χρήσιμοι για: | Περίπτωση χρήσης | Περιγραφή | | ------------------------ | ------------------------------------------------------------------------ | | **Γεωγραφική παράκαμψη** | Πρόσβαση σε OpenAI, Anthropic, Codex και Copilot από αποκλεισμένες χώρες | | **Εναλλαγή IP** | Κατανομή αιτημάτων σε πολλαπλές IP για την αποφυγή περιορισμού ρυθμού | | **Απόρρητο** | Απόκρυψη της πραγματικής σας IP από παρόχους ανώτερου επιπέδου | | **Συμμόρφωση** | Δρομολόγηση της κίνησης μέσω συγκεκριμένων δικαιοδοσιών | | **Δοκιμές** | Προσομοίωση αιτημάτων από διαφορετικές περιοχές | --- ## Επισκόπηση αρχιτεκτονικής ``` ┌───────────────────────────────────────────────────────────────┐ │ Διακομιστής OmniRoute │ │ │ │ ┌─────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ Μητρώο │ │ Διεκπεραιωτής│ │ Ανάκτηση │ │ │ │ διακομιστών │───▶│ διακομιστών │───▶│ (undici) │ │ │ │ (SQLite) │ │ (cache) │ │ │ │ │ └─────────────┘ └──────────────┘ └────────┬─────────┘ │ │ ▲ │ │ │ │ ▼ │ │ ┌──────┴──────┐ ┌──────────────────┐ │ │ │ Συγχρονισμός│ │ API παρόχου │ │ │ │ 1proxy │ │ ανώτερου επιπέδου│ │ │ │ (δωρεάν pool)│ │ │ │ │ └─────────────┘ └──────────────────┘ │ └───────────────────────────────────────────────────────────────┘ ``` ### Βασικά στοιχεία | Στοιχείο | Αρχείο | Ρόλος | | ----------------------------- | -------------------------------------------- | -------------------------------------------------------------------------- | | **Μητρώο διακομιστών** | `src/lib/db/proxies.ts` | CRUD για καταχωρίσεις διακομιστών μεσολάβησης και αναθέσεις πεδίου | | **Διεκπεραιωτής διακομιστών** | `open-sse/utils/proxyDispatcher.ts` | Δημιουργεί διεκπεραιωτές `undici` ProxyAgent/SOCKS με προσωρινή αποθήκευση | | **Ανάκτηση μέσω διακομιστή** | `open-sse/utils/proxyFetch.ts` | Περιβάλλει τη `fetch()` με εισαγωγή διεκπεραιωτή διακομιστή μεσολάβησης | | **Διαδρομή ρυθμίσεων** | `src/app/api/settings/proxy/route.ts` | API παλαιού τύπου για ρυθμίσεις διακομιστή (GET/PUT/DELETE) | | **Διαδρομή διαχείρισης** | `src/app/api/v1/management/proxies/route.ts` | API CRUD μητρώου (GET/POST/PATCH/DELETE) | | **Βάση δεδομένων 1proxy** | `src/lib/db/oneproxy.ts` | Μόνιμη αποθήκευση της δωρεάν αγοράς διακομιστών μεσολάβησης | --- ## Προεπιλεγμένη κατάσταση διακομιστή μεσολάβησης για νέους λογαριασμούς Σε** Ρυθμίσεις → Proxy → Καθολική διαμόρφωση** , χρήση** Ενεργοποίηση διακομιστή μεσολάβησης από προεπιλογή για νέες συνδέσεις** για να επιλέξετε την αρχική κατάσταση διακομιστή μεσολάβησης των λογαριασμών παρόχου που προστέθηκαν πρόσφατα. Η νέα ρύθμιση ελέγχει την αρχική κατάσταση διακομιστή μεσολάβησης των λογαριασμών παρόχου που προστέθηκαν πρόσφατα. Δεν αλλάζει τους υπάρχοντες λογαριασμούς ούτε αντικαθιστά τον γενικό διακόπτη διακομιστή μεσολάβησης. Η αρχική του τιμή διατηρεί την προηγούμενη συμπεριφορά. Απενεργοποιήστε το μία φορά για να δημιουργήσετε μελλοντικούς λογαριασμούς με τον διακομιστή μεσολάβησης απενεργοποιημένο από προεπιλογή. Η προτίμηση αποθηκεύεται ως `defaultNewConnectionProxyEnabled` μέσω των υπαρχουσών ρυθμίσεων API. Είναι προεπιλογή σε `true` όταν δεν αποθηκεύεται ποτέ. Η αποθήκευση `false` τίθεται σε ισχύ για επόμενους νέους λογαριασμούς χωρίς επανεκκίνηση. `POST /api/providers` δέχεται ένα προαιρετικό αυστηρό boolean `proxyEnabled`. ένα ρητό `true` ή `false` έχει προτεραιότητα έναντι της προεπιλογής δημιουργίας. Παράλειψη σε διπλότυπο λογαριασμό ή επανασύνδεση OAuth διατηρεί την αποθηκευμένη κατάσταση αυτού του λογαριασμού. Οι μεμονωμένοι λογαριασμοί μπορούν ακόμα να ενεργοποιηθούν ή να απενεργοποιηθούν στη συνέχεια. Οι επιλεκτικές μεταφορές παρόχου χρησιμοποιούν την προεπιλογή της εγκατάστασης προορισμού για νέους λογαριασμούς και διατηρούν την πολιτική προορισμού κατά την αντικατάσταση υπαρχόντων λογαριασμών. Οι εναλλαγές διακομιστή μεσολάβησης δεν είναι φορητά πεδία μεταφοράς. Η πλήρης επαναφορά αντιγράφων ασφαλείας και η ιστορική μετεγκατάσταση JSON/SQL διατηρούν την υπάρχουσα σημασιολογία επαναφοράς, συμπεριλαμβανομένων των αποθηκευμένων τιμών λογαριασμού και των προεπιλογών σχημάτων παλαιού τύπου. μια πλήρης επαναφορά ρυθμίσεων μπορεί επίσης να επαναφέρει αυτήν την προτίμηση. Αυτή η προτίμηση δεν εκχωρεί πληρεξούσιο ούτε αποδεικνύει ότι κάποιος είναι υγιής ή σε χρήση. Η πραγματική δρομολόγηση εξακολουθεί να εξαρτάται από τον γενικό διακόπτη διακομιστή μεσολάβησης και την ισχύουσα διαμόρφωση διακομιστή μεσολάβησης. Οι συνθετικοί πάροχοι χωρίς διαρκή λογαριασμό, η επισκεψιμότητα OAuth πριν από τη δημιουργία λογαριασμού, οι διακομιστής μεσολάβησης environment/system και η δικτύωση εξωτερικών συστημάτων υποστήριξης δεν εμπίπτουν στο πεδίο εφαρμογής τους. ## Σύστημα Proxy 4 Επιπέδων Το OmniRoute υποστηρίζει ρύθμιση proxy σε **τέσσερα ανεξάρτητα επίπεδα**, τα οποία επιλύονται κατά σειρά προτεραιότητας: ``` Σειρά Προτεραιότητας Επίλυσης (υψηλότερη → χαμηλότερη): 1. 🔵 Proxy Λογαριασμού/Σύνδεσης → ανά κλειδί API / σύνδεση OAuth 2. 🟡 Proxy Παρόχου → ανά πάροχο (π.χ. όλη η κίνηση OpenAI) 3. 🟠 Proxy Συνδυασμού → ανά συνδυασμό/ρύθμιση δρομολόγησης 4. 🟢 Καθολικό Proxy → όλη η κίνηση, όλοι οι πάροχοι ``` ### Πώς Λειτουργεί η Επίλυση Όταν το OmniRoute στέλνει ένα αίτημα σε έναν ανάντη πάροχο, καλεί τη `resolveProxyForConnectionFromRegistry()`, η οποία ελέγχει κάθε επίπεδο με τη σειρά: 1. **Επίπεδο λογαριασμού** — Έχει αντιστοιχιστεί proxy σε αυτό το συγκεκριμένο αναγνωριστικό σύνδεσης; 2. **Επίπεδο παρόχου** — Έχει αντιστοιχιστεί proxy σε αυτόν τον πάροχο (π.χ. `openai`); 3. **Καθολικό επίπεδο** — Έχει ρυθμιστεί καθολικό proxy; 4. **Χωρίς proxy** — Απευθείας σύνδεση με τον πάροχο. Χρησιμοποιείται η πρώτη αντιστοιχία. Αυτό σημαίνει ότι μπορείτε να ορίσετε ένα καθολικό proxy ως εφεδρική επιλογή, αλλά να το παρακάμψετε για συγκεκριμένους παρόχους ή συνδέσεις. ### Τι Δρομολογείται Μέσω Proxy | Τύπος Κίνησης | Μέσω Proxy; | Σημειώσεις | | ----------------------- | ----------- | ------------------------------------------------- | | Ολοκληρώσεις συνομιλίας | ✅ | Όλα τα αιτήματα `/v1/chat/completions` | | Ενσωματώσεις | ✅ | `/v1/embeddings` | | Δημιουργία εικόνων | ✅ | `/v1/images/generations` | | Ήχος (TTS/STT) | ✅ | `/v1/audio/*` | | Ανταλλαγή token OAuth | ✅ | Επιλύει το `unsupported_country_region_territory` | | Δοκιμές σύνδεσης | ✅ | Το κουμπί "Δοκιμή Σύνδεσης" χρησιμοποιεί το proxy | | Ανανέωση token | ✅ | Ανανέωση OAuth στο παρασκήνιο | | Συγχρονισμός μοντέλων | ✅ | Καταχώριση και εντοπισμός μοντέλων | --- ## Μητρώο Proxy (CRUD) Το μητρώο proxy είναι ένας πίνακας SQLite (`proxy_registry`) που αποθηκεύει όλα τα proxy σας. Κάθε proxy διαθέτει: | Πεδίο | Τύπος | Περιγραφή | | ---------- | ------------ | ------------------------------------------------- | | `id` | UUID | Μοναδικό αναγνωριστικό | | `name` | Συμβολοσειρά | Ετικέτα αναγνώσιμη από τον χρήστη | | `type` | Συμβολοσειρά | Πρωτόκολλο: `http`, `https`, `socks5` | | `host` | Συμβολοσειρά | Όνομα κεντρικού υπολογιστή ή IP του proxy | | `port` | Ακέραιος | Αριθμός θύρας | | `username` | Συμβολοσειρά | Όνομα χρήστη ταυτοποίησης (κρυπτογραφημένο) | | `password` | Συμβολοσειρά | Κωδικός πρόσβασης ταυτοποίησης (κρυπτογραφημένος) | | `region` | Συμβολοσειρά | Ετικέτα γεωγραφικής περιοχής | | `notes` | Συμβολοσειρά | Σημειώσεις ελεύθερου κειμένου | | `status` | Συμβολοσειρά | `active` ή `inactive` | | `source` | Συμβολοσειρά | `manual` ή `oneproxy` | ### Δημιουργία Proxy **Μέσω του Πίνακα Ελέγχου:** 1. Μεταβείτε στις **Ρυθμίσεις → Proxy** 2. Κάντε κλικ στην επιλογή **Προσθήκη Proxy** 3. Συμπληρώστε τον τύπο, τον κεντρικό υπολογιστή, τη θύρα και, προαιρετικά, τα διαπιστευτήρια ταυτοποίησης 4. Αποθηκεύστε **Μέσω API:** ```bash 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 ```bash 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 }' ``` > **Σημείωση:** Τα διαπιστευτήρια διατηρούνται, εκτός αν στείλετε ρητά μη κενές τιμές αντικατάστασης. Η αποστολή κενών συμβολοσειρών για `username`/`password` θα διατηρήσει τις αποθηκευμένες τιμές. ### Διαγραφή Proxy ```bash # Αποτυγχάνει αν το proxy έχει αντιστοιχιστεί σε οποιοδήποτε επίπεδο curl -X DELETE "http://localhost:20128/api/v1/management/proxies?id=proxy-uuid" # Εξαναγκασμένη διαγραφή (καταργεί και τις αντιστοιχίσεις) curl -X DELETE "http://localhost:20128/api/v1/management/proxies?id=proxy-uuid&force=1" ``` ### Παράθεση Proxy ```bash curl "http://localhost:20128/api/v1/management/proxies?limit=50&offset=0" ``` ### Αντιστοίχιση Proxy σε Επίπεδα ```bash # Αντιστοίχιση στο καθολικό επίπεδο 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}}' # Αντιστοίχιση σε συγκεκριμένο πάροχο 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}}' # Αντιστοίχιση σε συγκεκριμένη σύνδεση/κλειδί 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}}' ``` ### Επίλυση του Ενεργού Proxy Ελέγξτε ποιο proxy θα χρησιμοποιηθεί για μια δεδομένη σύνδεση: ```bash curl "http://localhost:20128/api/settings/proxy?resolve=connection-uuid" ``` Επιστρέφει το επιλυμένο proxy μαζί με το επίπεδό του (`account`, `provider` ή `global`) και την προέλευσή του. ### Μαζική Αντιστοίχιση Αντιστοιχίστε ένα proxy σε πολλούς παρόχους ή συνδέσεις ταυτόχρονα: ```bash 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" }' ``` ### Εισαγωγή/Εξαγωγή Τα proxy περιλαμβάνονται στο σύστημα **Δημιουργίας/Επαναφοράς Αντιγράφων Ασφαλείας**. Όταν εξάγετε τη ρύθμιση παραμέτρων του OmniRoute: 1. Μεταβείτε στον **Πίνακα Ελέγχου → Ρυθμίσεις → Αντίγραφα Ασφαλείας** 2. Κάντε κλικ στην **Εξαγωγή** — περιλαμβάνονται το μητρώο proxy και οι αντιστοιχίσεις 3. Για επαναφορά, κάντε κλικ στην **Εισαγωγή** και μεταφορτώστε το αρχείο αντιγράφου ασφαλείας Το μητρώο proxy υποστηρίζει επίσης **upsert βάσει host+port** — αν εισαγάγετε ένα proxy που υπάρχει ήδη (ίδιος κεντρικός υπολογιστής και ίδια θύρα), ενημερώνεται αντί να δημιουργηθεί διπλότυπο. ### Μετεγκατάσταση Παλαιού Συστήματος Αν ρυθμίσατε διακομιστές μεσολάβησης σε παλαιότερη έκδοση (πριν από το registry), το OmniRoute τους μετεγκαθιστά αυτόματα: ``` Παλιό key_value store → proxy_registry + proxy_assignments ``` Αυτό συμβαίνει μία φορά κατά την πρώτη εκκίνηση μετά την αναβάθμιση. Χρησιμοποιήστε το `migrateLegacyProxyConfigToRegistry({ force: true })` για να εκτελέσετε ξανά τη μετεγκατάσταση. --- ## Αγορά δωρεάν διακομιστών μεσολάβησης 1proxy > 🆕 **Συνεισφορά από τον [@oyi77](https://github.com/oyi77)** — PR [#1847](https://github.com/diegosouzapw/OmniRoute/pull/1847) (Ζήτημα [#1788](https://github.com/diegosouzapw/OmniRoute/issues/1788)) Το OmniRoute ενσωματώνεται με την κοινοτική πλατφόρμα **[1proxy](https://1proxy-api.aitradepulse.com)** για να παρέχει πρόσβαση σε **εκατοντάδες δωρεάν, επικυρωμένους διακομιστές μεσολάβησης** από όλο τον κόσμο. Αυτό είναι ιδανικό για χρήστες που δεν διαθέτουν δική τους υποδομή διακομιστών μεσολάβησης. ### Πώς λειτουργεί ``` ┌─────────────┐ Συγχρονισμός ┌─────────────────┐ Εναλλαγή ┌──────────┐ │ 1proxy API │ ────────────▶ │ proxy_registry │ ────────────▶ │ Πάροχος │ │ (εξωτερικό) │ έως και 500 │ source=oneproxy │ βάσει ποιότητας │ API │ └─────────────┘ διακομιστές μεσολάβησης └─────────────────┘ └──────────┘ ``` 1. **Συγχρονισμός** — Το OmniRoute ανακτά επικυρωμένους διακομιστές μεσολάβησης από το 1proxy API 2. **Αποθήκευση** — Οι διακομιστές μεσολάβησης αποθηκεύονται στον ίδιο πίνακα `proxy_registry` με `source = 'oneproxy'` 3. **Φιλτράρισμα** — Φιλτράρισμα βάσει πρωτοκόλλου, χώρας και βαθμολογίας ποιότητας 4. **Εναλλαγή** — Επιλογή του καλύτερου διακομιστή μεσολάβησης με χρήση στρατηγικής ποιότητας, τυχαίας ή διαδοχικής επιλογής 5. **Αυτόματη υποβάθμιση** — Η βαθμολογία ποιότητας των διακομιστών μεσολάβησης που αποτυγχάνουν μειώνεται· κάτω από το όριο → επισημαίνονται ως ανενεργοί ### Συγχρονισμός διακομιστών μεσολάβησης **Μέσω του πίνακα ελέγχου:** 1. Μεταβείτε στην καρτέλα **Ρυθμίσεις → 1proxy** 2. Κάντε κλικ στο **"Συγχρονισμός τώρα"** 3. Δείτε τα στατιστικά: συνολικοί διακομιστές μεσολάβησης, αριθμός ενεργών, μέση ποιότητα, ανάλυση ανά χώρα **Μέσω API:** ```bash # Ενεργοποίηση συγχρονισμού curl -X POST http://localhost:20128/api/settings/oneproxy \ -H "Content-Type: application/json" \ -d '{}' # Απόκριση: # { "success": true, "added": 127, "updated": 45, "failed": 2, "total": 172 } ``` ### Φιλτράρισμα διακομιστών μεσολάβησης ```bash # Φιλτράρισμα βάσει πρωτοκόλλου curl "http://localhost:20128/api/settings/oneproxy?protocol=socks5" # Φιλτράρισμα βάσει χώρας curl "http://localhost:20128/api/settings/oneproxy?countryCode=US" # Φιλτράρισμα βάσει ελάχιστης βαθμολογίας ποιότητας curl "http://localhost:20128/api/settings/oneproxy?minQuality=80" # Συνδυασμός φίλτρων curl "http://localhost:20128/api/settings/oneproxy?protocol=http&countryCode=DE&minQuality=70" ``` ### Βαθμολογίες ποιότητας διακομιστών μεσολάβησης Κάθε διακομιστής μεσολάβησης του 1proxy συνοδεύεται από μεταδεδομένα: | Πεδίο | Περιγραφή | | --------------- | ------------------------------------------------------------------------------- | | `qualityScore` | Βαθμολογία 0-100 από την επικύρωση του 1proxy | | `latencyMs` | Μετρημένη καθυστέρηση δικτύου | | `anonymity` | `transparent`, `anonymous` ή `elite` | | `googleAccess` | Αν ο διακομιστής μεσολάβησης μπορεί να αποκτήσει πρόσβαση στις υπηρεσίες Google | | `countryCode` | Κωδικός χώρας ISO δύο γραμμάτων | | `lastValidated` | Χρονική σήμανση της τελευταίας επικύρωσης | Οι βαθμολογίες ποιότητας προσαρμόζονται δυναμικά: - **Τα αποτυχημένα αιτήματα** μειώνουν τη βαθμολογία κατά 10 βαθμούς - **Η βαθμολογία πέφτει σε ≤10** → ο διακομιστής μεσολάβησης επισημαίνεται ως `inactive` - Οι ανενεργοί διακομιστές μεσολάβησης εξαιρούνται από την εναλλαγή ### Στρατηγικές εναλλαγής ```bash # Εναλλαγή βάσει ποιότητας (πρώτα ο καλύτερος διακομιστής μεσολάβησης) — προεπιλογή curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \ -H "Content-Type: application/json" \ -d '{"strategy": "quality"}' # Τυχαία εναλλαγή curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \ -d '{"strategy": "random"}' # Διαδοχική επιλογή (πρώτα ο διακομιστής που επικυρώθηκε λιγότερο πρόσφατα) curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \ -d '{"strategy": "sequential"}' ``` ### Αυτόματος διακόπτης κυκλώματος Ο συγχρονισμός του 1proxy διαθέτει ενσωματωμένο αυτόματο διακόπτη κυκλώματος: - Μετά από **5 διαδοχικές αποτυχίες συγχρονισμού**, αποκλείονται οι επόμενες προσπάθειες συγχρονισμού - Επαναφορά με: `resetOneproxyCircuitBreaker()` ή επανεκκίνηση του διακομιστή - Η κατάσταση συγχρονισμού είναι διαθέσιμη στο `GET /api/settings/oneproxy?action=status` ### Εκκαθάριση διακομιστών μεσολάβησης του 1proxy ```bash # Διαγραφή ενός διακομιστή μεσολάβησης του 1proxy curl -X DELETE "http://localhost:20128/api/settings/oneproxy?id=proxy-uuid" # Εκκαθάριση ΟΛΩΝ των διακομιστών μεσολάβησης του 1proxy (οι μη αυτόματοι διακομιστές μεσολάβησης παραμένουν ανεπηρέαστοι) curl -X DELETE "http://localhost:20128/api/settings/oneproxy?clearAll=1" ``` --- ## Αποφυγή ανίχνευσης & απόκρυψη Το OmniRoute δεν δρομολογεί απλώς την κίνηση μέσω ενός διακομιστή μεσολάβησης — κάνει την κίνηση να φαίνεται νόμιμη: ### Παραποίηση αποτυπώματος TLS Χρησιμοποιεί το `wreq-js` για τη δημιουργία αποτυπωμάτων TLS που μοιάζουν με αυτά ενός προγράμματος περιήγησης, παρακάμπτοντας συστήματα ανίχνευσης bot τα οποία επισημαίνουν χειραψίες TLS που δεν προέρχονται από προγράμματα περιήγησης. ### Αντιστοίχιση αποτυπώματος CLI Η **Εναλλαγή αποτυπώματος CLI** (`Ρυθμίσεις → Ασφάλεια`) αναδιατάσσει τις κεφαλίδες HTTP και τα πεδία του σώματος JSON ώστε να αντιστοιχούν στην ακριβή υπογραφή των εγγενών εκτελέσιμων CLI (Claude Code, Codex κ.λπ.). Αυτό λειτουργεί **επιπρόσθετα** στον διακομιστή μεσολάβησης: ``` Η IP σας (αποκλεισμένη) → IP διακομιστή μεσολάβησης (ΗΠΑ) → API παρόχου + παραποίηση TLS + αποτύπωμα CLI ``` Αποκτάτε ταυτόχρονα τόσο **απόκρυψη IP** όσο και **αυθεντικότητα αιτήματος**. ### Διατήρηση IP διακομιστή μεσολάβησης Οι χρωματικά κωδικοποιημένες ενδείξεις στον πίνακα ελέγχου δείχνουν ποιο επίπεδο διακομιστή μεσολάβησης είναι ενεργό: | Ένδειξη | Επίπεδο | Σημασία | | ------- | -------- | ------------------------------------------------------------------------------------- | | 🟢 | Καθολικό | Όλη η κίνηση διέρχεται μέσω αυτού του διακομιστή μεσολάβησης | | 🟡 | Πάροχος | Μόνο η κίνηση αυτού του παρόχου δρομολογείται μέσω διακομιστή μεσολάβησης | | 🔵 | Σύνδεση | Αυτό το συγκεκριμένο κλειδί/λογαριασμός χρησιμοποιεί αυτόν τον διακομιστή μεσολάβησης | Η ένδειξη εμφανίζει επίσης την επιλυμένη IP του διακομιστή μεσολάβησης για επαλήθευση. --- ## Λειτουργίες ανάντη διακομιστή μεσολάβησης Για παρόχους που χρησιμοποιούν το μοτίβο CLIProxyAPI, το OmniRoute υποστηρίζει τρεις λειτουργίες ανάντη διακομιστή μεσολάβησης: | Λειτουργία | Περιγραφή | | ------------- | ----------------------------------------------------------------------------------------- | | `native` | Το OmniRoute χειρίζεται απευθείας τη δρομολόγηση μέσω διακομιστή μεσολάβησης (προεπιλογή) | | `cliproxyapi` | Αναθέτει τη λειτουργία σε μια εξωτερική παρουσία CLIProxyAPI | | `fallback` | Δοκιμάζει πρώτα την εγγενή λειτουργία και, αν αποτύχει, χρησιμοποιεί το CLIProxyAPI | Διαμόρφωση ανά πάροχο: ```bash curl -X PUT "http://localhost:20128/api/upstream-proxy/openai" \ -H "Content-Type: application/json" \ -d '{"mode": "native", "enabled": true}' ``` --- ## Περιβάλλον χρήστη πίνακα ελέγχου ### Ρυθμίσεις → Καρτέλα διακομιστή μεσολάβησης - Διαμόρφωση **καθολικού διακομιστή μεσολάβησης** (ορίζεται μία φορά για όλη την κίνηση) - Παρακάμψεις **διακομιστή μεσολάβησης ανά πάροχο** - Αναθέσεις **διακομιστή μεσολάβησης ανά σύνδεση** - **Δοκιμή σύνδεσης** μέσω του διαμορφωμένου διακομιστή μεσολάβησης - **Χρωματικά κωδικοποιημένες ενδείξεις** που εμφανίζουν το ενεργό επίπεδο διακομιστή μεσολάβησης ### Ρυθμίσεις → Καρτέλα 1proxy - Κουμπί **Συγχρονισμός τώρα** για ανάκτηση δωρεάν διακομιστών μεσολάβησης - **Κάρτες στατιστικών**: Σύνολο, Ενεργοί, Μέση ποιότητα, Τελευταίος συγχρονισμός - **Φίλτρα**: Πρωτόκολλο, Κωδικός χώρας, Ελάχιστη ποιότητα - **Πίνακας διακομιστών μεσολάβησης** με κεντρικό υπολογιστή, πρωτόκολλο, χώρα, βαθμολογία ποιότητας, καθυστέρηση, ανωνυμία και πρόσβαση στο Google - Πλαίσιο **κατάστασης συγχρονισμού** με παρακολούθηση επιτυχιών/αποτυχιών και αριθμό διαδοχικών αποτυχιών - **Εκκαθάριση όλων** για την αφαίρεση όλων των καταχωρίσεων 1proxy --- ## Αναφορά API ### API ρυθμίσεων διακομιστή μεσολάβησης | Μέθοδος | Τελικό σημείο | Περιγραφή | | -------- | ---------------------------------------------- | -------------------------------------------------------- | | `GET` | `/api/settings/proxy` | Λήψη πλήρους διαμόρφωσης διακομιστή μεσολάβησης | | `GET` | `/api/settings/proxy?level=global` | Λήψη καθολικού διακομιστή μεσολάβησης | | `GET` | `/api/settings/proxy?level=provider&id=openai` | Λήψη διακομιστή μεσολάβησης παρόχου | | `GET` | `/api/settings/proxy?resolve=connectionId` | Επίλυση ενεργού διακομιστή μεσολάβησης | | `PUT` | `/api/settings/proxy` | Ενημέρωση διαμόρφωσης διακομιστή μεσολάβησης | | `DELETE` | `/api/settings/proxy?level=provider&id=openai` | Αφαίρεση διακομιστή μεσολάβησης στο συγκεκριμένο επίπεδο | ### API μητρώου διακομιστών μεσολάβησης | Μέθοδος | Τελικό σημείο | Περιγραφή | | -------- | ------------------------------------------------- | ------------------------------------------------------- | | `GET` | `/api/v1/management/proxies` | Παράθεση όλων των διακομιστών μεσολάβησης | | `GET` | `/api/v1/management/proxies?id=uuid` | Λήψη διακομιστή μεσολάβησης βάσει ID | | `GET` | `/api/v1/management/proxies?id=uuid&where_used=1` | Λήψη αναθέσεων διακομιστή μεσολάβησης | | `POST` | `/api/v1/management/proxies` | Δημιουργία διακομιστή μεσολάβησης | | `PATCH` | `/api/v1/management/proxies` | Ενημέρωση διακομιστή μεσολάβησης | | `DELETE` | `/api/v1/management/proxies?id=uuid` | Διαγραφή διακομιστή μεσολάβησης | | `DELETE` | `/api/v1/management/proxies?id=uuid&force=1` | Εξαναγκαστική διαγραφή | | `POST` | `/api/v1/management/proxies/bulk-assign` | Μαζική ανάθεση | | `GET` | `/api/v1/management/proxies/assignments` | Παράθεση αναθέσεων | | `GET` | `/api/v1/management/proxies/health` | Στατιστικά εύρυθμης λειτουργίας διακομιστών μεσολάβησης | ### API σηράγγων Για να εκθέσετε την παρουσία OmniRoute στο δημόσιο διαδίκτυο (Cloudflare/ngrok/Tailscale), αντί να δρομολογείτε την εξερχόμενη κίνηση μέσω διακομιστή μεσολάβησης, ανατρέξτε στο [TUNNELS_GUIDE.md](./TUNNELS_GUIDE.md). Το REST API σηράγγων βρίσκεται κάτω από το `/api/tunnels/{cloudflared,ngrok,tailscale}/*` και είναι ανεξάρτητο από την αλυσίδα εξερχόμενων διακομιστών μεσολάβησης που τεκμηριώνεται παραπάνω. ### API 1proxy | Μέθοδος | Τελικό σημείο | Περιγραφή | | -------- | -------------------------------------- | -------------------------------------------- | | `GET` | `/api/settings/oneproxy` | Παράθεση διακομιστών μεσολάβησης 1proxy | | `GET` | `/api/settings/oneproxy?action=stats` | Λήψη στατιστικών + κατάστασης συγχρονισμού | | `GET` | `/api/settings/oneproxy?action=status` | Λήψη μόνο της κατάστασης συγχρονισμού | | `POST` | `/api/settings/oneproxy` | Ενεργοποίηση συγχρονισμού | | `POST` | `/api/settings/oneproxy/rotate` | Εναλλαγή στον επόμενο διακομιστή μεσολάβησης | | `DELETE` | `/api/settings/oneproxy?id=uuid` | Διαγραφή ενός | | `DELETE` | `/api/settings/oneproxy?clearAll=1` | Εκκαθάριση όλων | ### API ανάντη διακομιστή μεσολάβησης | Μέθοδος | Τελικό σημείο | Περιγραφή | | -------- | --------------------------------- | -------------------------------------------------- | | `GET` | `/api/upstream-proxy/:providerId` | Λήψη διαμόρφωσης ανάντη διακομιστή μεσολάβησης | | `PUT` | `/api/upstream-proxy/:providerId` | Ορισμός λειτουργίας ανάντη διακομιστή μεσολάβησης | | `DELETE` | `/api/upstream-proxy/:providerId` | Αφαίρεση διαμόρφωσης ανάντη διακομιστή μεσολάβησης | --- ## Μεταβλητές Περιβάλλοντος | Μεταβλητή | Προεπιλογή | Περιγραφή | | --------------------- | ---------- | --------------------------------------------------------------------------------------------- | | `ENABLE_SOCKS5_PROXY` | `true` | Ενεργοποίηση υποστήριξης διακομιστή μεσολάβησης SOCKS5 (προεπιλογή `true` στο `.env.example`) | --- ## Αντιμετώπιση Προβλημάτων ### "Ο διακομιστής μεσολάβησης SOCKS5 είναι απενεργοποιημένος" Ορίστε `ENABLE_SOCKS5_PROXY=true` στο αρχείο `.env` και κάντε επανεκκίνηση. ### Σφάλματα "socket hang up" μέσω διακομιστή μεσολάβησης Αυτό είναι φυσιολογικό με φθηνούς διακομιστές μεσολάβησης που διακόπτουν τις αδρανείς συνδέσεις. Το OmniRoute το χειρίζεται ήδη ως εξής: - Απενεργοποιεί το keep-alive στις συνδέσεις διακομιστή μεσολάβησης (`keepAliveTimeout: 1`) - Απενεργοποιεί το pipelining (`pipelining: 0`) - Αποθηκεύει προσωρινά τους dispatchers για την αποφυγή επαναλαμβανόμενων χειραψιών Αν το πρόβλημα επιμένει, δοκιμάστε διαφορετικό διακομιστή μεσολάβησης ή χρησιμοποιήστε τη λειτουργία εναλλαγής του 1proxy. ### "unsupported_country_region_territory" κατά τη διάρκεια του OAuth Βεβαιωθείτε ότι ο διακομιστής μεσολάβησης έχει διαμορφωθεί **πριν** ξεκινήσετε τη ροή OAuth. Το OmniRoute δρομολογεί την ανταλλαγή token του OAuth μέσω του διαμορφωμένου διακομιστή μεσολάβησης. Ορίστε πρώτα έναν καθολικό διακομιστή μεσολάβησης ή έναν διακομιστή μεσολάβησης σε επίπεδο παρόχου και, στη συνέχεια, συνδεθείτε. ### Ο διακομιστής μεσολάβησης δεν χρησιμοποιείται Ελέγξτε τη σειρά επίλυσης: 1. Επαληθεύστε με `GET /api/settings/proxy?resolve=your-connection-id` 2. Ελέγξτε αν το `status` του διακομιστή μεσολάβησης είναι `active` (όχι `inactive`) 3. Βεβαιωθείτε ότι το πεδίο εφαρμογής της αντιστοίχισης του διακομιστή μεσολάβησης ταιριάζει με τη σύνδεσή σας ### Αποτυχία συγχρονισμού του 1proxy Ελέγξτε την κατάσταση συγχρονισμού: ```bash curl "http://localhost:20128/api/settings/oneproxy?action=status" ``` Αν `consecutiveFailures >= 5`, έχει ενεργοποιηθεί ο διακόπτης κυκλώματος. Επανεκκινήστε τον διακομιστή για επαναφορά ή περιμένετε τη χειροκίνητη επαναφορά. --- ## Σχήμα Βάσης Δεδομένων ### Πίνακας `proxy_registry` ```sql 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' ή 'oneproxy' quality_score INTEGER, -- 0-100 (μόνο για 1proxy) latency_ms INTEGER, -- χιλιοστά του δευτερολέπτου (μόνο για 1proxy) anonymity TEXT, -- transparent/anonymous/elite google_access INTEGER DEFAULT 0, -- μπορεί να αποκτήσει πρόσβαση στο Google; (1proxy) last_validated TEXT, -- χρονική σήμανση ISO (1proxy) country_code TEXT, -- κωδικός ISO 2 γραμμάτων (1proxy) created_at TEXT NOT NULL, updated_at TEXT NOT NULL ); ``` ### Πίνακας `proxy_assignments` ```sql 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, -- ID παρόχου, ID σύνδεσης ή ID συνδυασμού created_at TEXT NOT NULL, updated_at TEXT NOT NULL, UNIQUE(scope, scope_id) ); ``` --- ## Έλεγχος Κατάστασης Διακομιστή Μεσολάβησης (v3.8.16+) Ο μηχανισμός **ταχείας αποτυχίας διακομιστή μεσολάβησης** του OmniRoute (`src/lib/proxyHealth.ts`) εντοπίζει τους ανενεργούς διακομιστές μεσολάβησης σε <2s μέσω ενός γρήγορου ελέγχου σύνδεσης TCP και, στη συνέχεια, **αποθηκεύει προσωρινά το αποτέλεσμα** για την αποφυγή επιβάρυνσης ανά αίτημα. ### Πώς Λειτουργεί ``` Αίτημα ──▶ ProxyHealthCache.get(url) │ ├─ Επιτυχία προσωρινής μνήμης + πρόσφατο; ──▶ επιστροφή αποθηκευμένης κατάστασης │ └─ Αστοχία προσωρινής μνήμης / παρωχημένο; ──▶ σύνδεση TCP στο host:port (χρονικό όριο: FAST_FAIL_TIMEOUT_MS) ──▶ προσωρινή αποθήκευση για HEALTH_CACHE_TTL_MS ──▶ επιστροφή αποτελέσματος ``` Χωρίς αυτό, ένας ανενεργός διακομιστής μεσολάβησης θα απέκλειε κάθε αίτημα για ολόκληρο το διάστημα του `PROXY_TIMEOUT_MS` (προεπιλογή 30s) πριν αποτύχει. ### Ρυθμιζόμενες Μεταβλητές Περιβάλλοντος | Μεταβλητή | Προεπιλογή | Σκοπός | | ---------------------------- | ---------- | -------------------------------------------------------- | | `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | Χρονικό όριο σύνδεσης TCP ανά έλεγχο κατάστασης | | `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | Διάρκεια προσωρινής αποθήκευσης αποτελέσματος κατάστασης | **Προτεινόμενες τιμές:** | Σενάριο | Χρονικό όριο ταχείας αποτυχίας | TTL προσωρινής μνήμης | Αιτιολόγηση | | ------------------------------------------ | ------------------------------ | --------------------- | ---------------------------------------------------------------------------------------------------------------- | | Πύλη API υψηλής διεκπεραιωτικής ικανότητας | 1500ms | 60000ms | Επιθετική ταχεία αποτυχία, μεγαλύτερη διάρκεια προσωρινής μνήμης για λιγότερους ελέγχους | | Γεωγραφικά κατανεμημένοι κόμβοι | 3000ms | 15000ms | Τα πιο αργά δίκτυα χρειάζονται περισσότερο χρόνο· μικρότερη διάρκεια προσωρινής μνήμης για γρήγορη ανακατεύθυνση | | Ανάπτυξη / δοκιμές | 1000ms | 10000ms | Γρήγορες επαναλήψεις σε τοπικούς διακομιστές μεσολάβησης | | Απόκρυψη / αποφυγή εντοπισμού | 2500ms | 45000ms | Αποφυγή ταχείας ανίχνευσης που θα μπορούσε να ενεργοποιήσει όρια ρυθμού | ### Επιθεώρηση Κατάστασης Διακομιστή Μεσολάβησης ```ts import { getAllProxyHealthStatuses, invalidateProxyHealth } from "omniroute/proxyHealth"; const statuses = getAllProxyHealthStatuses(); for (const s of statuses) { console.log(`${s.proxyUrl} → healthy=${s.healthy}, stale=${s.stale}`); } // Επιβολή νέου ελέγχου συγκεκριμένου διακομιστή μεσολάβησης invalidateProxyHealth("http://user:pass@203.0.113.7:8080"); ``` Η σημαία `stale` είναι `true` όταν η καταχώριση της προσωρινής μνήμης έχει υπερβεί το `HEALTH_CACHE_TTL_MS` και το επόμενο αίτημα θα ενεργοποιήσει νέο έλεγχο. ### Προεπιλογές Ανά Τύπο Διακομιστή Μεσολάβησης Ο έλεγχος κατάστασης χρησιμοποιεί εύλογες προεπιλογές βάσει του σχήματος URL: | Σχήμα | Προεπιλεγμένη θύρα | | -------------------------- | ------------------ | | `http://` | 8080 | | `https://` | 443 | | `socks5://` / `socks5h://` | 1080 | Οι προσαρμοσμένες θύρες στο URL (`http://host:9999`) υπερισχύουν πάντα της προεπιλογής του σχήματος. --- ## Αναλυτικά Στοιχεία & Παρατηρησιμότητα Διακομιστών Μεσολάβησης Το OmniRoute παρακολουθεί τη χρήση ανά διακομιστή μεσολάβησης, ώστε να βοηθά τους διαχειριστές να διαγιγνώσκουν μοτίβα δρομολόγησης, αιχμές καθυστέρησης και επαναλαμβανόμενες αποτυχίες. ### Τι Παρακολουθείται Για κάθε αίτημα που διέρχεται μέσω ενός διαμορφωμένου διακομιστή μεσολάβησης, το OmniRoute καταγράφει: | Μετρική | Περιγραφή | | ------------ | ----------------------------------------------------------------------------------------- | | `proxy_url` | Πλήρες URL διακομιστή μεσολάβησης (με καλυμμένα διαπιστευτήρια) | | `provider` | Αναγνωριστικό ανάντη παρόχου (openai, anthropic κ.λπ.) | | `latency_ms` | Συνολικός χρόνος μετάβασης και επιστροφής, μαζί με τη χειραψία του διακομιστή μεσολάβησης | | `connect_ms` | Μόνο ο χρόνος σύνδεσης TCP | | `status` | Κωδικός κατάστασης HTTP από τον ανάντη πάροχο | | `error` | Κλάση σφάλματος, εάν το αίτημα απέτυχε | | `timestamp` | ISO 8601 UTC | ### Πρόσβαση στα Δεδομένα ```bash # Πρόσφατα συμβάντα διακομιστών μεσολάβησης curl -H "Authorization: Bearer $OMNIROUTE_KEY" \ "http://localhost:20128/api/usage/proxy-logs?limit=100" ``` Το πραγματικό τελικό σημείο είναι `/api/usage/proxy-logs` (δείτε `src/app/api/usage/proxy-logs/route.ts`). Αυτό το τελικό σημείο υποστηρίζει: - `GET /api/usage/proxy-logs` — ανάκτηση αρχείων καταγραφής διακομιστών μεσολάβησης - `DELETE /api/usage/proxy-logs` — διαγραφή όλων των αρχείων καταγραφής διακομιστών μεσολάβησης Εάν χρειάζεται, τα συγκεντρωτικά στατιστικά μπορούν να αναζητηθούν απευθείας από τον πίνακα `proxy_logs` μέσω SQL. Το περιβάλλον εργασίας του πίνακα ελέγχου ενδέχεται να προσφέρει συγκεντρωτικές προβολές. ### Συνήθη Μοτίβα **Εντοπισμός ενός ασταθούς διακομιστή μεσολάβησης** (εναλλάσσεται μεταξύ επιτυχίας/αποτυχίας): ```sql 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; ``` **Εύρεση αργών διακομιστών μεσολάβησης** (καθυστέρηση p95 > 2s): ```sql 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; ``` --- ## Δέντρο Αποφάσεων Στρατηγικής Εναλλαγής Όταν έχουν εκχωρηθεί πολλοί διακομιστές μεσολάβησης σε μια εμβέλεια, το OmniRoute χρησιμοποιεί μια **στρατηγική εναλλαγής** για να επιλέξει ποιον θα χρησιμοποιήσει για κάθε αίτημα. Η στρατηγική διαμορφώνεται σε επίπεδο εμβέλειας (καθολικά, ανά πάροχο, ανά λογαριασμό, ανά συνδυασμό). ### Διαθέσιμες Στρατηγικές | Στρατηγική | Πότε χρησιμοποιείται | Συμβιβασμός | | ---------------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------- | | `quality` (προεπιλογή) | Περιβάλλον παραγωγής με διακομιστές ανάμεικτης ποιότητας | Προτιμά διακομιστές με υψηλή βαθμολογία· ενδέχεται να παραμελεί όσους έχουν χαμηλή βαθμολογία | | `random` | Κατανομή φορτίου, ιδιωτικότητα | Ομοιόμορφη κατανομή· αγνοεί τις ενδείξεις ποιότητας | | `sequential` | Αποσφαλμάτωση, ντετερμινιστικές δοκιμές | Εναλλάσσει τους διακομιστές με τη σειρά· η συμπεριφορά του είναι εύκολα κατανοητή | ### Δέντρο Αποφάσεων ``` Έχετε βαθμολογίες ποιότητας για τους διακομιστές μεσολάβησης; │ ┌───────────┴───────────┐ │ │ ΝΑΙ ΟΧΙ │ │ Είναι όλοι οι │ διακομιστές περίπου │ ισοδύναμοι σε ποιότητα; │ │ │ ┌────┴────┐ │ │ │ │ ΝΑΙ ΟΧΙ Χρησιμοποιήστε │ │ `random` │ │ (η ομοιόμορφη │ │ κατανομή δημιουργεί │ │ δεδομένα ποιότητας │ │ με την πάροδο του χρόνου) │ │ │ Χρησιμοποιήστε `quality` │ (ιδανικό για │ ανάμεικτη ποιότητα) │ Χρησιμοποιήστε `random` (κατανείμετε το φορτίο ομοιόμορφα) ``` ## Αυτόματος αποκλεισμός αποτυχημένων δικών σας proxy Το pool του marketplace του 1proxy υποβαθμίζει ήδη αυτόματα τα αποτυχημένα proxy από μόνο του (βλ. [Βαθμολογίες ποιότητας proxy](#proxy-quality-scores)). Για τα proxy που προσθέσατε **εσείς** στο registry, ο scheduler ελέγχου εύρυθμης λειτουργίας στο παρασκήνιο (`src/lib/proxyHealth/scheduler.ts`) παρέχει την ίδια συμπεριφορά «αυτόματου αποκλεισμού ενός ανενεργού μέλους από την αλυσίδα», χωρίς να διαγράφει τίποτα: ```bash # .env — απενεργοποιήστε προσωρινά ένα proxy μετά από 3 διαδοχικούς αποτυχημένους ελέγχους και ενεργοποιήστε το ξανά # αυτόματα μόλις αρχίσει να αποκρίνεται ξανά στους ελέγχους. PROXY_AUTO_DISABLE=true PROXY_AUTO_REMOVE_AFTER=3 ``` Πώς εντάσσεται σε μια αλυσίδα πολλαπλών proxy: 1. Ο scheduler ελέγχει κάθε καταχωρισμένο proxy ανά `PROXY_HEALTH_INTERVAL_MS` (προεπιλογή 10 λεπτά, ελάχιστο 1 λεπτό). 2. Μετά από `PROXY_AUTO_REMOVE_AFTER` διαδοχικές **οριστικές** αποτυχίες (μια πραγματική αποτυχία σύνδεσης — ένα timeout ή μια απόκριση 5xx από τον ίδιο τον στόχο ελέγχου δεν προσμετράται ποτέ, βλ. [Έλεγχος εύρυθμης λειτουργίας proxy](#proxy-health-checking-v3816)), το `status` του proxy ορίζεται σε `dead`. 3. Το `dead` είναι μία από τις καταστάσεις που αποκλείει το φίλτρο ενεργών καταστάσεων, το οποίο χρησιμοποιείται από την επίλυση pool/rotation, επομένως η εναλλαγή ενός scope (round-robin / random / sticky / latency — βλ. [Δέντρο αποφάσεων στρατηγικής εναλλαγής](#rotation-strategy-decision-tree)) σταματά αμέσως να παραχωρεί αυτό το proxy σε νέα αιτήματα. Κανένα άλλο proxy στο pool δεν επηρεάζεται και ολόκληρο το pool δεν επιστρέφει ποτέ σιωπηρά σε απευθείας σύνδεση — βλ. τον μηχανισμό προστασίας fail-closed του [Συστήματος proxy 4 επιπέδων](#4-level-proxy-system). 4. Ο scheduler συνεχίζει να ελέγχει τα `dead` proxy στο ίδιο χρονικό διάστημα. Ο επόμενος επιτυχημένος έλεγχος αλλάζει το `status` ξανά σε `active` και το proxy επανεντάσσεται στην εναλλαγή — χωρίς να απαιτείται μη αυτόματη εκ νέου προσθήκη. Αυτή η λειτουργία είναι σκόπιμα **προαιρετική και μη καταστροφική**: από προεπιλογή, ο scheduler απλώς καταμετρά και καταγράφει τις αποτυχίες (βλ. πολιτική C στο `decision.ts`), ενώ το `PROXY_AUTO_DISABLE` δεν διαγράφει ποτέ μια εγγραφή — αυτός είναι ο σκοπός της ξεχωριστής, πιο επιθετικής ρύθμισης `PROXY_AUTO_REMOVE`. Αν και οι δύο έχουν οριστεί σε `true`, υπερισχύει το `PROXY_AUTO_REMOVE` (ένα proxy που πρόκειται να διαγραφεί δεν έχει λόγο να απενεργοποιηθεί προσωρινά στο ενδιάμεσο). Ανατρέξτε στην αναφορά [Ρύθμιση παραμέτρων περιβάλλοντος](../reference/ENVIRONMENT.md) για την πλήρη λίστα μεταβλητών. --- > 📖 **Σχετική τεκμηρίωση:** > > - [Οδηγός χρήστη](../guides/USER_GUIDE.md) — Γενική εγκατάσταση και ρύθμιση παραμέτρων > - [Αναφορά API](../reference/API_REFERENCE.md) — Πλήρης τεκμηρίωση API > - [Ρύθμιση παραμέτρων περιβάλλοντος](../reference/ENVIRONMENT.md) — Όλες οι μεταβλητές περιβάλλοντος