# 🌐 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) · 🇬🇷 [el](../../../el/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) · 🇮🇳 [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) --- > **ଭୌଗୋଳିକ ଅବରୋଧକୁ ଏଡ଼ାନ୍ତୁ, ନିଜ ପରିଚୟକୁ ସୁରକ୍ଷିତ ରଖନ୍ତୁ, ଏବଂ ଯେକୌଣସି proxy ମାଧ୍ୟମରେ AI ଟ୍ରାଫିକ୍କୁ ରୁଟ୍ କରନ୍ତୁ — କୌଣସି configuration ଜଟିଳତା ବିନା।** OmniRoute ଏକ ସମ୍ପୂର୍ଣ୍ଣ ବୈଶିଷ୍ଟ୍ୟଯୁକ୍ତ proxy ପରିଚାଳନା ସିଷ୍ଟମ୍ ଅନ୍ତର୍ଭୁକ୍ତ କରେ, ଯାହା ଆପଣଙ୍କୁ upstream AI provider ଟ୍ରାଫିକ୍କୁ HTTP, HTTPS, କିମ୍ବା SOCKS5 proxy ମାଧ୍ୟମରେ ରୁଟ୍ କରିବାକୁ ଦିଏ। ଆପଣ ଅବରୋଧିତ ଅଞ୍ଚଳରେ ଥାଆନ୍ତୁ, IP rotation ଆବଶ୍ୟକ କରୁଥାଆନ୍ତୁ, କିମ୍ବା ଗୋପନ fingerprinting ଚାହୁଁଥାଆନ୍ତୁ — ଏହି ମାର୍ଗଦର୍ଶିକା ସମସ୍ତ ବିଷୟକୁ ଅନ୍ତର୍ଭୁକ୍ତ କରେ। --- ## ବିଷୟସୂଚୀ - [Proxy କାହିଁକି ବ୍ୟବହାର କରିବେ?](#why-use-proxies) - [Architecture ସମୀକ୍ଷା](#architecture-overview) - [4-ସ୍ତରୀୟ Proxy ସିଷ୍ଟମ୍](#4-level-proxy-system) - [Proxy Registry (CRUD)](#proxy-registry-crud) - [1proxy ମାଗଣା Marketplace](#1proxy-free-proxy-marketplace) - [Proxy Rotation](#proxy-rotation) - [Anti-Detection ଏବଂ Stealth](#anti-detection--stealth) - [Upstream Proxy Mode](#upstream-proxy-modes) - [Dashboard UI](#dashboard-ui) - [API ସନ୍ଦର୍ଭ](#api-reference) - [Environment Variable](#environment-variables) - [ସମସ୍ୟା ସମାଧାନ](#troubleshooting) --- ## Proxy କାହିଁକି ବ୍ୟବହାର କରିବେ? ଅନେକ AI provider ଭୌଗୋଳିକ ଅଞ୍ଚଳ ଆଧାରରେ ପ୍ରବେଶକୁ ସୀମିତ କରନ୍ତି। **ରୁଷିଆ, ଚୀନ୍, ଇରାନ୍, କ୍ୟୁବା, ତୁର୍କୀ** ଏବଂ ଅନ୍ୟାନ୍ୟ ଦେଶର developerମାନେ ଏହିପରି errorର ସମ୍ମୁଖୀନ ହୁଅନ୍ତି: ``` unsupported_country_region_territory ``` ଅବରୋଧିତ ଅଞ୍ଚଳ ବାହାରେ ମଧ୍ୟ proxy ନିମ୍ନଲିଖିତ କାର୍ଯ୍ୟଗୁଡ଼ିକ ପାଇଁ ଉପଯୋଗୀ: | ବ୍ୟବହାର କ୍ଷେତ୍ର | ବର୍ଣ୍ଣନା | | ------------------------- | -------------------------------------------------------------------- | | **ଭୌଗୋଳିକ ଅବରୋଧ ଏଡ଼ାଇବା** | ଅବରୋଧିତ ଦେଶଗୁଡ଼ିକରୁ OpenAI, Anthropic, Codex, Copilot ଆକ୍ସେସ୍ କରନ୍ତୁ | | **IP rotation** | rate limiting ଏଡ଼ାଇବା ପାଇଁ ଏକାଧିକ IP ମଧ୍ୟରେ request ବଣ୍ଟନ କରନ୍ତୁ | | **ଗୋପନୀୟତା** | upstream providerଙ୍କଠାରୁ ନିଜର ପ୍ରକୃତ IP ଲୁଚାନ୍ତୁ | | **ଅନୁପାଳନ** | ନିର୍ଦ୍ଦିଷ୍ଟ ବିଚାରାଧୀନ କ୍ଷେତ୍ର ମାଧ୍ୟମରେ ଟ୍ରାଫିକ୍ ରୁଟ୍ କରନ୍ତୁ | | **ପରୀକ୍ଷଣ** | ବିଭିନ୍ନ ଅଞ୍ଚଳରୁ ଆସୁଥିବା requestକୁ ଅନୁକରଣ କରନ୍ତୁ | --- ## Architecture ସମୀକ୍ଷା ``` ┌───────────────────────────────────────────────────────────────┐ │ OmniRoute Server │ │ │ │ ┌─────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ Proxy │ │ Proxy │ │ Proxy │ │ │ │ Registry │───▶│ Dispatcher │───▶│ Fetch (undici) │ │ │ │ (SQLite) │ │ (cached) │ │ │ │ │ └─────────────┘ └──────────────┘ └────────┬─────────┘ │ │ ▲ │ │ │ │ ▼ │ │ ┌──────┴──────┐ ┌──────────────────┐ │ │ │ 1proxy Sync │ │ Upstream │ │ │ │ (ମାଗଣା pool) │ │ Provider API │ │ │ └─────────────┘ └──────────────────┘ │ └───────────────────────────────────────────────────────────────┘ ``` ### ପ୍ରମୁଖ Component | Component | File | ଭୂମିକା | | -------------------- | -------------------------------------------- | ------------------------------------------------------------ | | **Proxy Registry** | `src/lib/db/proxies.ts` | proxy entry ଏବଂ scope assignment ପାଇଁ CRUD | | **Proxy Dispatcher** | `open-sse/utils/proxyDispatcher.ts` | caching ସହିତ `undici` ProxyAgent/SOCKS dispatcher ସୃଷ୍ଟି କରେ | | **Proxy Fetch** | `open-sse/utils/proxyFetch.ts` | proxy dispatcher injection ସହିତ `fetch()`କୁ wrap କରେ | | **Settings Route** | `src/app/api/settings/proxy/route.ts` | ପୁରୁଣା proxy config API (GET/PUT/DELETE) | | **Management Route** | `src/app/api/v1/management/proxies/route.ts` | Registry CRUD API (GET/POST/PATCH/DELETE) | | **1proxy DB** | `src/lib/db/oneproxy.ts` | ମାଗଣା proxy marketplaceର ସ୍ଥାୟୀ ସଂରକ୍ଷଣ | --- ## 4-ସ୍ତରୀୟ ପ୍ରକ୍ସି ସିଷ୍ଟମ୍ OmniRoute ପ୍ରାଥମିକତା କ୍ରମରେ ସମାଧାନ କରାଯାଉଥିବା **ଚାରୋଟି ସ୍ୱାଧୀନ ସ୍କୋପ୍ରେ** ପ୍ରକ୍ସି ବିନ୍ୟାସକୁ ସମର୍ଥନ କରେ: ``` ପ୍ରାଥମିକତା ସମାଧାନ କ୍ରମ (ସର୍ବୋଚ୍ଚ → ସର୍ବନିମ୍ନ): 1. 🔵 ଆକାଉଣ୍ଟ/କନେକ୍ସନ୍ ପ୍ରକ୍ସି → ପ୍ରତ୍ୟେକ API କି / OAuth କନେକ୍ସନ୍ ପାଇଁ 2. 🟡 ପ୍ରଦାନକାରୀ ପ୍ରକ୍ସି → ପ୍ରତ୍ୟେକ ପ୍ରଦାନକାରୀ ପାଇଁ (ଯଥା, ସମସ୍ତ OpenAI ଟ୍ରାଫିକ୍) 3. 🟠 କମ୍ବୋ ପ୍ରକ୍ସି → ପ୍ରତ୍ୟେକ କମ୍ବୋ/ରାଉଟିଂ ବିନ୍ୟାସ ପାଇଁ 4. 🟢 ଗ୍ଲୋବାଲ୍ ପ୍ରକ୍ସି → ସମସ୍ତ ଟ୍ରାଫିକ୍, ସମସ୍ତ ପ୍ରଦାନକାରୀ ``` ### ସମାଧାନ କିପରି କାର୍ଯ୍ୟ କରେ OmniRoute ଯେତେବେଳେ କୌଣସି ଅପ୍ଷ୍ଟ୍ରିମ୍ ପ୍ରଦାନକାରୀଙ୍କୁ ଅନୁରୋଧ ପଠାଏ, ଏହା `resolveProxyForConnectionFromRegistry()`କୁ କଲ୍ କରେ, ଯାହା କ୍ରମାନୁସାରେ ପ୍ରତ୍ୟେକ ସ୍ତର ଯାଞ୍ଚ କରେ: 1. **ଆକାଉଣ୍ଟ-ସ୍ତର** — ଏହି ନିର୍ଦ୍ଦିଷ୍ଟ କନେକ୍ସନ୍ ID ପାଇଁ କୌଣସି ପ୍ରକ୍ସି ନ୍ୟସ୍ତ କରାଯାଇଛି କି? 2. **ପ୍ରଦାନକାରୀ-ସ୍ତର** — ଏହି ପ୍ରଦାନକାରୀଙ୍କ ପାଇଁ (ଯଥା, `openai`) କୌଣସି ପ୍ରକ୍ସି ନ୍ୟସ୍ତ କରାଯାଇଛି କି? 3. **ଗ୍ଲୋବାଲ୍-ସ୍ତର** — କୌଣସି ଗ୍ଲୋବାଲ୍ ପ୍ରକ୍ସି ବିନ୍ୟାସ କରାଯାଇଛି କି? 4. **କୌଣସି ପ୍ରକ୍ସି ନାହିଁ** — ପ୍ରଦାନକାରୀଙ୍କ ସହିତ ସିଧାସଳଖ କନେକ୍ସନ୍। ପ୍ରଥମ ମେଳକୁ ବ୍ୟବହାର କରାଯାଏ। ଏହାର ଅର୍ଥ, ଆପଣ ଏକ ଗ୍ଲୋବାଲ୍ ପ୍ରକ୍ସିକୁ ଫଲ୍ବ୍ୟାକ୍ ଭାବେ ସେଟ୍ କରିପାରିବେ, କିନ୍ତୁ ନିର୍ଦ୍ଦିଷ୍ଟ ପ୍ରଦାନକାରୀ କିମ୍ବା କନେକ୍ସନ୍ ପାଇଁ ଏହାକୁ ଓଭର୍ରାଇଡ୍ କରିପାରିବେ। ### କେଉଁଗୁଡ଼ିକ ପ୍ରକ୍ସି ମାଧ୍ୟମରେ ଯାଏ | ଟ୍ରାଫିକ୍ ପ୍ରକାର | ପ୍ରକ୍ସି ହୁଏ? | ଟିପ୍ପଣୀ | | ------------------ | ------------ | -------------------------------------------------- | | ଚାଟ୍ କମ୍ପ୍ଲିସନ୍ | ✅ | ସମସ୍ତ `/v1/chat/completions` ଅନୁରୋଧ | | ଏମ୍ବେଡିଂ | ✅ | `/v1/embeddings` | | ଛବି ସୃଷ୍ଟି | ✅ | `/v1/images/generations` | | ଅଡିଓ (TTS/STT) | ✅ | `/v1/audio/*` | | OAuth ଟୋକନ୍ ବିନିମୟ | ✅ | `unsupported_country_region_territory`ର ସମାଧାନ କରେ | | କନେକ୍ସନ୍ ପରୀକ୍ଷା | ✅ | "କନେକ୍ସନ୍ ପରୀକ୍ଷା କରନ୍ତୁ" ବଟନ୍ ପ୍ରକ୍ସି ବ୍ୟବହାର କରେ | | ଟୋକନ୍ ରିଫ୍ରେଶ୍ | ✅ | ପୃଷ୍ଠଭୂମି OAuth ନବୀକରଣ | | ମଡେଲ୍ ସିଙ୍କ୍ | ✅ | ମଡେଲ୍ ତାଲିକାକରଣ ଏବଂ ଅନ୍ୱେଷଣ | --- ## ପ୍ରକ୍ସି ରେଜିଷ୍ଟ୍ରି (CRUD) ପ୍ରକ୍ସି ରେଜିଷ୍ଟ୍ରି ହେଉଛି ଏକ SQLite ଟେବୁଲ୍ (`proxy_registry`), ଯାହା ଆପଣଙ୍କର ସମସ୍ତ ପ୍ରକ୍ସି ସଂରକ୍ଷଣ କରେ। ପ୍ରତ୍ୟେକ ପ୍ରକ୍ସିରେ ନିମ୍ନଲିଖିତ ରହିଛି: | ଫିଲ୍ଡ | ପ୍ରକାର | ବିବରଣୀ | | ---------- | ------------- | ------------------------------------------------------------- | | `id` | UUID | ଅନନ୍ୟ ପରିଚାୟକ | | `name` | ଷ୍ଟ୍ରିଙ୍ଗ୍ | ମଣିଷ ପଢ଼ିପାରିବା ଯୋଗ୍ୟ ଲେବଲ୍ | | `type` | ଷ୍ଟ୍ରିଙ୍ଗ୍ | ପ୍ରୋଟୋକଲ୍: `http`, `https`, `socks5` | | `host` | ଷ୍ଟ୍ରିଙ୍ଗ୍ | ପ୍ରକ୍ସି ହୋଷ୍ଟନେମ୍ କିମ୍ବା IP | | `port` | ପୂର୍ଣ୍ଣସଂଖ୍ୟା | ପୋର୍ଟ ନମ୍ବର | | `username` | ଷ୍ଟ୍ରିଙ୍ଗ୍ | ପ୍ରମାଣୀକରଣ ୟୁଜର୍ନେମ୍ (ସଂରକ୍ଷିତ ଅବସ୍ଥାରେ ଏନ୍କ୍ରିପ୍ଟ କରାଯାଇଥାଏ) | | `password` | ଷ୍ଟ୍ରିଙ୍ଗ୍ | ପ୍ରମାଣୀକରଣ ପାସ୍ୱାର୍ଡ (ସଂରକ୍ଷିତ ଅବସ୍ଥାରେ ଏନ୍କ୍ରିପ୍ଟ କରାଯାଇଥାଏ) | | `region` | ଷ୍ଟ୍ରିଙ୍ଗ୍ | ଭୌଗୋଳିକ ଅଞ୍ଚଳ ଲେବଲ୍ | | `notes` | ଷ୍ଟ୍ରିଙ୍ଗ୍ | ମୁକ୍ତ-ପାଠ୍ୟ ଟିପ୍ପଣୀ | | `status` | ଷ୍ଟ୍ରିଙ୍ଗ୍ | `active` କିମ୍ବା `inactive` | | `source` | ଷ୍ଟ୍ରିଙ୍ଗ୍ | `manual` କିମ୍ବା `oneproxy` | ### ଏକ ପ୍ରକ୍ସି ସୃଷ୍ଟି କରିବା **ଡ୍ୟାସ୍ବୋର୍ଡ ମାଧ୍ୟମରେ:** 1. **ସେଟିଂସ୍ → ପ୍ରକ୍ସି**କୁ ଯାଆନ୍ତୁ 2. **ପ୍ରକ୍ସି ଯୋଡ଼ନ୍ତୁ**ରେ କ୍ଲିକ୍ କରନ୍ତୁ 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" }' ``` ### ଏକ ପ୍ରକ୍ସି ଅପଡେଟ୍ କରିବା ```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` ପାଇଁ ଖାଲି ଷ୍ଟ୍ରିଙ୍ଗ୍ ପଠାଇଲେ ସଂରକ୍ଷିତ ମୂଲ୍ୟଗୁଡ଼ିକ ଅପରିବର୍ତ୍ତିତ ରହିବ। ### ଏକ ପ୍ରକ୍ସି ଡିଲିଟ୍ କରିବା ```bash # ପ୍ରକ୍ସିଟି କୌଣସି ସ୍କୋପ୍ରେ ନ୍ୟସ୍ତ ହୋଇଥିଲେ ବିଫଳ ହୁଏ 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" ``` ### ପ୍ରକ୍ସିଗୁଡ଼ିକର ତାଲିକା ଦେଖିବା ```bash curl "http://localhost:20128/api/v1/management/proxies?limit=50&offset=0" ``` ### ସ୍କୋପ୍ଗୁଡ଼ିକୁ ପ୍ରକ୍ସି ନ୍ୟସ୍ତ କରିବା ```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}}' ``` ### ପ୍ରଭାବୀ ପ୍ରକ୍ସି ସମାଧାନ କରିବା ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ କନେକ୍ସନ୍ ପାଇଁ କେଉଁ ପ୍ରକ୍ସି ବ୍ୟବହୃତ ହେବ ଯାଞ୍ଚ କରନ୍ତୁ: ```bash curl "http://localhost:20128/api/settings/proxy?resolve=connection-uuid" ``` ଏହା ସମାଧାନ ହୋଇଥିବା ପ୍ରକ୍ସିକୁ ତାହାର ସ୍ତର (`account`, `provider`, କିମ୍ବା `global`) ଏବଂ ଉତ୍ସ ସହିତ ଫେରାଏ। ### ବଲ୍କ ନ୍ୟସ୍ତକରଣ ଏକାଥରେ ଏକାଧିକ ପ୍ରଦାନକାରୀ କିମ୍ବା କନେକ୍ସନ୍କୁ ଗୋଟିଏ ପ୍ରକ୍ସି ନ୍ୟସ୍ତ କରନ୍ତୁ: ```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" }' ``` ### ଇମ୍ପୋର୍ଟ/ଏକ୍ସପୋର୍ଟ ପ୍ରକ୍ସିଗୁଡ଼ିକ **ବ୍ୟାକଅପ୍/ରିଷ୍ଟୋର୍** ସିଷ୍ଟମ୍ରେ ସାମିଲ ଥାଏ। ଆପଣଙ୍କ OmniRoute ବିନ୍ୟାସ ଏକ୍ସପୋର୍ଟ କରିବାବେଳେ: 1. **ଡ୍ୟାସ୍ବୋର୍ଡ → ସେଟିଂସ୍ → ବ୍ୟାକଅପ୍**କୁ ଯାଆନ୍ତୁ 2. **ଏକ୍ସପୋର୍ଟ**ରେ କ୍ଲିକ୍ କରନ୍ତୁ — ପ୍ରକ୍ସି ରେଜିଷ୍ଟ୍ରି ଏବଂ ନ୍ୟସ୍ତକରଣଗୁଡ଼ିକ ସାମିଲ ହୋଇଥାଏ 3. ପୁନଃସ୍ଥାପନ କରିବାକୁ, **ଇମ୍ପୋର୍ଟ**ରେ କ୍ଲିକ୍ କରନ୍ତୁ ଏବଂ ବ୍ୟାକଅପ୍ ଫାଇଲ୍ ଅପଲୋଡ୍ କରନ୍ତୁ ପ୍ରକ୍ସି ରେଜିଷ୍ଟ୍ରି **host+port ଦ୍ୱାରା upsert**କୁ ମଧ୍ୟ ସମର୍ଥନ କରେ — ଯଦି ଆପଣ ପୂର୍ବରୁ ଥିବା ଏକ ପ୍ରକ୍ସିକୁ ଇମ୍ପୋର୍ଟ କରନ୍ତି (ସମାନ ହୋଷ୍ଟ ଏବଂ ପୋର୍ଟ), ତେବେ ଏହା ଏକ ଡୁପ୍ଲିକେଟ୍ ସୃଷ୍ଟି କରିବା ପରିବର୍ତ୍ତେ ଅପଡେଟ୍ ହୁଏ। ### ପୁରୁଣା ସିଷ୍ଟମ୍ରୁ ମାଇଗ୍ରେସନ୍ ଯଦି ଆପଣ କୌଣସି ପୁରୁଣା ସଂସ୍କରଣରେ (pre-registry) ପ୍ରକ୍ସିଗୁଡ଼ିକୁ ବିନ୍ୟାସ କରିଥିଲେ, OmniRoute ସେଗୁଡ଼ିକୁ ସ୍ୱୟଂଚାଳିତ ଭାବରେ ସ୍ଥାନାନ୍ତର କରେ: ``` ପୁରୁଣା key_value ଷ୍ଟୋର୍ → 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. **Settings → 1proxy** ଟ୍ୟାବ୍କୁ ଯାଆନ୍ତୁ 2. **"Sync Now"**ରେ କ୍ଲିକ୍ କରନ୍ତୁ 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` | 1proxy ବୈଧୀକରଣରୁ 0-100 ରେଟିଂ | | `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 ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ସ୍ପୁଫିଂ ବ୍ରାଉଜର୍ ସଦୃଶ TLS ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ସୃଷ୍ଟି କରିବା ପାଇଁ `wreq-js` ବ୍ୟବହାର କରେ, ଯାହା ଅଣ-ବ୍ରାଉଜର୍ TLS ହ୍ୟାଣ୍ଡଶେକ୍କୁ ଚିହ୍ନଟ କରୁଥିବା ବଟ୍ ଡିଟେକ୍ସନ୍ ସିଷ୍ଟମ୍ଗୁଡ଼ିକୁ ବାଇପାସ୍ କରେ। ### CLI ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ମ୍ୟାଚିଂ **CLI ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଟଗଲ୍** (`Settings → Security`) ନେଟିଭ୍ CLI ବାଇନାରିଗୁଡ଼ିକର (Claude Code, Codex ଇତ୍ୟାଦି) ସଠିକ୍ ସିଗ୍ନେଚର୍ ସହିତ ମେଳ କରିବା ପାଇଁ HTTP ହେଡର୍ ଏବଂ JSON ବଡି ଫିଲ୍ଡଗୁଡ଼ିକୁ ପୁନଃକ୍ରମବଦ୍ଧ କରେ। ଏହା ପ୍ରକ୍ସିର **ଅତିରିକ୍ତ ସ୍ତର ଭାବରେ** କାମ କରେ: ``` ଆପଣଙ୍କ IP (ଅବରୋଧିତ) → ପ୍ରକ୍ସି IP (US) → ପ୍ରଦାନକାରୀ 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}' ``` --- ## ଡ୍ୟାସ୍ବୋର୍ଡ UI ### Settings → Proxy ଟ୍ୟାବ୍ - **ଗ୍ଲୋବାଲ୍ ପ୍ରକ୍ସି** ବିନ୍ୟାସ (ସମସ୍ତ ଟ୍ରାଫିକ୍ ପାଇଁ ଥରେ ସେଟ୍ କରନ୍ତୁ) - **ପ୍ରତି-ପ୍ରଦାନକାରୀ ପ୍ରକ୍ସି** ଓଭର୍ରାଇଡ୍ - **ପ୍ରତି-ସଂଯୋଗ ପ୍ରକ୍ସି** ଆସାଇନ୍ମେଣ୍ଟ - ବିନ୍ୟାସିତ ପ୍ରକ୍ସି ମାଧ୍ୟମରେ **ସଂଯୋଗ ପରୀକ୍ଷା** - ସକ୍ରିୟ ପ୍ରକ୍ସି ସ୍ତର ଦର୍ଶାଉଥିବା **ରଙ୍ଗ-କୋଡ୍ ବ୍ୟାଜ୍ଗୁଡ଼ିକ** ### Settings → 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}/*` ଅଧୀନରେ ରହେ ଏବଂ ଉପରେ ଡକ୍ୟୁମେଣ୍ଟ କରାଯାଇଥିବା ଆଉଟ୍ବାଉଣ୍ଡ ପ୍ରକ୍ସି ଶୃଙ୍ଖଳାଠାରୁ ସ୍ୱାଧୀନ ଅଟେ। ### 1proxy API | ପଦ୍ଧତି | ଏଣ୍ଡପଏଣ୍ଟ | ବିବରଣୀ | | -------- | -------------------------------------- | ----------------------------------------- | | `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 ପ୍ରକ୍ସି ସମର୍ଥନ ସକ୍ଷମ କରନ୍ତୁ (`.env.example`ରେ ଡିଫଲ୍ଟ `true`) | --- ## ସମସ୍ୟା ସମାଧାନ ### "SOCKS5 ପ୍ରକ୍ସି ଅକ୍ଷମ ଅଛି" ଆପଣଙ୍କ `.env` ଫାଇଲ୍ରେ `ENABLE_SOCKS5_PROXY=true` ସେଟ୍ କରି ପୁନଃଚାଳନ କରନ୍ତୁ। ### ପ୍ରକ୍ସି ମାଧ୍ୟମରେ "socket hang up" ତ୍ରୁଟି ନିଷ୍କ୍ରିୟ ସଂଯୋଗଗୁଡ଼ିକୁ ବିଚ୍ଛିନ୍ନ କରୁଥିବା ଶସ୍ତା ପ୍ରକ୍ସିଗୁଡ଼ିକ ସହିତ ଏହା ସ୍ୱାଭାବିକ। OmniRoute ନିମ୍ନପ୍ରକାରେ ଏହାକୁ ପୂର୍ବରୁ ପରିଚାଳନା କରେ: - ପ୍ରକ୍ସି ସଂଯୋଗଗୁଡ଼ିକରେ keep-alive ଅକ୍ଷମ କରି (`keepAliveTimeout: 1`) - pipelining ଅକ୍ଷମ କରି (`pipelining: 0`) - ବାରମ୍ବାର handshakes ଏଡ଼ାଇବା ପାଇଁ dispatchers କ୍ୟାଶ୍ କରି ଯଦି ଏହା ଜାରି ରହେ, ଏକ ଭିନ୍ନ ପ୍ରକ୍ସି ଚେଷ୍ଟା କରନ୍ତୁ କିମ୍ବା 1proxy rotation ବୈଶିଷ୍ଟ୍ୟ ବ୍ୟବହାର କରନ୍ତୁ। ### OAuth ସମୟରେ "unsupported_country_region_territory" OAuth ପ୍ରବାହ ଆରମ୍ଭ କରିବାର **ପୂର୍ବରୁ** ପ୍ରକ୍ସି କନଫିଗର୍ ହୋଇଥିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ। OmniRoute, OAuth token exchangeକୁ କନଫିଗର୍ ହୋଇଥିବା ପ୍ରକ୍ସି ମାଧ୍ୟମରେ ରୁଟ୍ କରେ। ପ୍ରଥମେ ଏକ global କିମ୍ବା provider-level ପ୍ରକ୍ସି ସେଟ୍ କରନ୍ତୁ, ତା’ପରେ ସଂଯୋଗ କରନ୍ତୁ। ### ପ୍ରକ୍ସି ବ୍ୟବହୃତ ହେଉନାହିଁ resolution କ୍ରମ ଯାଞ୍ଚ କରନ୍ତୁ: 1. `GET /api/settings/proxy?resolve=your-connection-id` ସହିତ ଯାଞ୍ଚ କରନ୍ତୁ 2. ପ୍ରକ୍ସି `status`, `active` (`inactive` ନୁହେଁ) ଅଛି କି ଯାଞ୍ଚ କରନ୍ତୁ 3. ପ୍ରକ୍ସି assignment scope ଆପଣଙ୍କ ସଂଯୋଗ ସହିତ ମେଳ ଖାଉଥିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ ### 1proxy sync ବିଫଳ ହେଉଛି sync ସ୍ଥିତି ଯାଞ୍ଚ କରନ୍ତୁ: ```bash curl "http://localhost:20128/api/settings/oneproxy?action=status" ``` ଯଦି `consecutiveFailures >= 5`, circuit breaker ଟ୍ରିପ୍ ହୋଇଛି। reset କରିବା ପାଇଁ ସର୍ଭର୍ ପୁନଃଚାଳନ କରନ୍ତୁ କିମ୍ବା manual reset ପାଇଁ ଅପେକ୍ଷା କରନ୍ତୁ। --- ## ଡାଟାବେସ୍ ସ୍କିମା ### `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 timestamp (1proxy) country_code TEXT, -- ISO 2-letter code (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, -- provider ID, connection ID, କିମ୍ବା combo ID created_at TEXT NOT NULL, updated_at TEXT NOT NULL, UNIQUE(scope, scope_id) ); ``` --- ## ପ୍ରକ୍ସି ସ୍ୱାସ୍ଥ୍ୟ ଯାଞ୍ଚ (v3.8.16+) OmniRouteର **proxy fast-fail** ପ୍ରଣାଳୀ (`src/lib/proxyHealth.ts`) ଏକ ଦ୍ରୁତ TCP ସଂଯୋଗ ଯାଞ୍ଚ ମାଧ୍ୟମରେ <2s ଭିତରେ ଅଚଳ ପ୍ରକ୍ସିଗୁଡ଼ିକୁ ଚିହ୍ନଟ କରେ, ତା’ପରେ ପ୍ରତ୍ୟେକ ଅନୁରୋଧର ଅତିରିକ୍ତ ବ୍ୟୟ ଏଡ଼ାଇବା ପାଇଁ **ଫଳାଫଳକୁ କ୍ୟାଶ୍ କରେ**। ### ଏହା କିପରି କାମ କରେ ``` ଅନୁରୋଧ ──▶ ProxyHealthCache.get(url) │ ├─ କ୍ୟାଶ୍ ହିଟ୍ + ସଦ୍ୟତମ? ──▶ କ୍ୟାଶ୍ ହୋଇଥିବା ସ୍ଥିତି ଫେରାନ୍ତୁ │ └─ କ୍ୟାଶ୍ ମିସ୍ / ପୁରୁଣା? ──▶ host:portକୁ TCP ସଂଯୋଗ (ସମୟସୀମା: 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` | ଏକ ସ୍ୱାସ୍ଥ୍ୟ ଫଳାଫଳ କେତେ ସମୟ ପର୍ଯ୍ୟନ୍ତ କ୍ୟାଶ୍ ହୁଏ | **ସୁପାରିସ୍ କରାଯାଇଥିବା ମୂଲ୍ୟଗୁଡ଼ିକ:** | ପରିସ୍ଥିତି | Fast-fail ସମୟସୀମା | କ୍ୟାଶ୍ TTL | କାରଣ | | --------------------------- | ----------------- | ---------- | ------------------------------------------------------------------------ | | ଉଚ୍ଚ-throughput API gateway | 1500ms | 60000ms | ଆକ୍ରମଣାତ୍ମକ fail-fast, ଯାଞ୍ଚ ହ୍ରାସ କରିବା ପାଇଁ ଦୀର୍ଘତର କ୍ୟାଶ୍ | | ଭୌଗୋଳିକ ଭାବେ ବିତରିତ nodes | 3000ms | 15000ms | ଧୀର ନେଟୱର୍କଗୁଡ଼ିକୁ ଅଧିକ ସମୟ ଆବଶ୍ୟକ; ଦ୍ରୁତ failover ପାଇଁ କ୍ଷୁଦ୍ରତର କ୍ୟାଶ୍ | | Dev / ପରୀକ୍ଷଣ | 1000ms | 10000ms | ସ୍ଥାନୀୟ ପ୍ରକ୍ସିଗୁଡ଼ିକରେ ଦ୍ରୁତ ପୁନରାବୃତ୍ତି | | Stealth / anti-detection | 2500ms | 45000ms | rate limits ସକ୍ରିୟ କରିପାରୁଥିବା ଦ୍ରୁତ probingକୁ ଏଡ଼ାନ୍ତୁ | ### ପ୍ରକ୍ସି ସ୍ୱାସ୍ଥ୍ୟ ନିରୀକ୍ଷଣ ```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"); ``` କ୍ୟାଶ୍ ଏଣ୍ଟ୍ରି `HEALTH_CACHE_TTL_MS` ଅତିକ୍ରମ କରିଥିଲେ ଏବଂ ପରବର୍ତ୍ତୀ ଅନୁରୋଧ ଏକ ନୂତନ ଯାଞ୍ଚ ଆରମ୍ଭ କରିବାକୁ ଥିଲେ, `stale` ଫ୍ଲାଗ୍ଟି `true` ହୁଏ। ### ପ୍ରତି-ପ୍ରକ୍ସି ପ୍ରକାରର ଡିଫଲ୍ଟଗୁଡ଼ିକ ସ୍ୱାସ୍ଥ୍ୟ ଯାଞ୍ଚ URL scheme ଆଧାରରେ ଉପଯୁକ୍ତ ଡିଫଲ୍ଟଗୁଡ଼ିକ ବ୍ୟବହାର କରେ: | Scheme | ଡିଫଲ୍ଟ port | | -------------------------- | ----------- | | `http://` | 8080 | | `https://` | 443 | | `socks5://` / `socks5h://` | 1080 | URLରେ ଥିବା custom ports (`http://host:9999`) ସବୁବେଳେ scheme ଡିଫଲ୍ଟଠାରୁ ପ୍ରାଥମିକତା ପାଏ। --- ## ପ୍ରକ୍ସି ବିଶ୍ଳେଷଣ ଓ ପର୍ଯ୍ୟବେକ୍ଷଣୀୟତା ରାଉଟିଂ ପ୍ୟାଟର୍ନ, ବିଳମ୍ବ ବୃଦ୍ଧି ଏବଂ ବାରମ୍ବାର ଘଟୁଥିବା ବିଫଳତାଗୁଡ଼ିକ ନିର୍ଣ୍ଣୟ କରିବାରେ ଅପରେଟରମାନଙ୍କୁ ସାହାଯ୍ୟ କରିବା ପାଇଁ OmniRoute ପ୍ରତ୍ୟେକ ପ୍ରକ୍ସିର ବ୍ୟବହାର ଟ୍ରାକ୍ କରେ। ### କ’ଣ ଟ୍ରାକ୍ କରାଯାଏ ବିନ୍ୟାସିତ ପ୍ରକ୍ସି ମାଧ୍ୟମରେ ଯାଉଥିବା ପ୍ରତ୍ୟେକ ଅନୁରୋଧ ପାଇଁ OmniRoute ନିମ୍ନଲିଖିତ ତଥ୍ୟ ରେକର୍ଡ କରେ: | ମେଟ୍ରିକ୍ | ବିବରଣୀ | | ------------ | ----------------------------------------------------------- | | `proxy_url` | ସମ୍ପୂର୍ଣ୍ଣ ପ୍ରକ୍ସି URL (ପ୍ରମାଣୀକରଣ ପରିଚୟପତ୍ର ଲୁକ୍କାୟିତ ଥାଏ) | | `provider` | ଅପ୍ଷ୍ଟ୍ରିମ୍ ପ୍ରଦାତା ID (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` — ସମସ୍ତ ପ୍ରକ୍ସି ଲଗ୍ ସଫା କରନ୍ତୁ ଆବଶ୍ୟକ ହେଲେ SQL ମାଧ୍ୟମରେ `proxy_logs` ଟେବୁଲ୍ରୁ ସମଷ୍ଟିଗତ ପରିସଂଖ୍ୟାନ ସିଧାସଳଖ କ୍ୱେରି କରାଯାଇପାରିବ। ଡ୍ୟାଶବୋର୍ଡ UI ସମଷ୍ଟିଗତ ଦୃଶ୍ୟ ପ୍ରଦାନ କରିପାରେ। ### ସାଧାରଣ ପ୍ୟାଟର୍ନଗୁଡ଼ିକ **ଏକ ଅସ୍ଥିର ପ୍ରକ୍ସି ଚିହ୍ନଟ କରନ୍ତୁ** (ସଫଳତା/ବିଫଳତା ମଧ୍ୟରେ ବାରମ୍ବାର ପରିବର୍ତ୍ତିତ ହୁଏ): ```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` ବ୍ୟବହାର କରନ୍ତୁ (ଲୋଡ୍ ସମାନ ଭାବରେ ବଣ୍ଟନ କରନ୍ତୁ) ``` ## ଆପଣଙ୍କ ନିଜ ପ୍ରକ୍ସିଗୁଡ଼ିକ ପାଇଁ ସ୍ୱୟଂଚାଳିତ ବିଫଳତା ବହିଷ୍କରଣ 1proxy ମାର୍କେଟପ୍ଲେସ୍ ପୁଲ୍ ପୂର୍ବରୁ ନିଜେ ବିଫଳ ପ୍ରକ୍ସିଗୁଡ଼ିକର ମାନ ସ୍ୱୟଂଚାଳିତ ଭାବେ ହ୍ରାସ କରିଥାଏ ([ପ୍ରକ୍ସି ଗୁଣବତ୍ତା ସ୍କୋର୍](#proxy-quality-scores) ଦେଖନ୍ତୁ)। ଆପଣ ରେଜିଷ୍ଟ୍ରିରେ ଯୋଗ କରିଥିବା ପ୍ରକ୍ସିଗୁଡ଼ିକ ପାଇଁ, ପୃଷ୍ଠଭୂମି ସ୍ୱାସ୍ଥ୍ୟ ସ୍କେଜୁଲର୍ (`src/lib/proxyHealth/scheduler.ts`) କୌଣସି ଜିନିଷ ବିଲୋପ ନକରି ସମାନ "ନିଷ୍କ୍ରିୟ ସଦସ୍ୟକୁ ସ୍ୱୟଂଚାଳିତ ଭାବେ ଶୃଙ୍ଖଳରୁ ବାଦ ଦିଅନ୍ତୁ" ଆଚରଣ ପ୍ରଦାନ କରେ: ```bash # .env — କ୍ରମାଗତ 3ଟି ବିଫଳ ପ୍ରୋବ୍ ପରେ ଏକ ପ୍ରକ୍ସିକୁ ସାମୟିକ ଭାବେ ଅକ୍ଷମ କରନ୍ତୁ, ଏବଂ ଏହା # ପୁଣିଥରେ ପ୍ରୋବ୍ଗୁଡ଼ିକୁ ପ୍ରତିକ୍ରିୟା ଦେବା ଆରମ୍ଭ କଲେ ସ୍ୱୟଂଚାଳିତ ଭାବେ ପୁନଃସକ୍ଷମ କରନ୍ତୁ। PROXY_AUTO_DISABLE=true PROXY_AUTO_REMOVE_AFTER=3 ``` ଏହା ଏକ ବହୁ-ପ୍ରକ୍ସି ଶୃଙ୍ଖଳରେ କିପରି କାର୍ଯ୍ୟ କରେ: 1. ସ୍କେଜୁଲର୍ ପ୍ରତ୍ୟେକ `PROXY_HEALTH_INTERVAL_MS` ଅନ୍ତରାଳରେ ପ୍ରତ୍ୟେକ ପଞ୍ଜୀକୃତ ପ୍ରକ୍ସିକୁ ପ୍ରୋବ୍ କରେ (ଡିଫଲ୍ଟ 10 ମିନିଟ୍; ସର୍ବନିମ୍ନ 1 ମିନିଟ୍)। 2. `PROXY_AUTO_REMOVE_AFTER` ସଂଖ୍ୟକ କ୍ରମାଗତ **ନିର୍ଣ୍ଣାୟକ** ବିଫଳତା ପରେ (ଏକ ପ୍ରକୃତ ସଂଯୋଗ ବିଫଳତା — ଏକ ସମୟସୀମା ସମାପ୍ତି କିମ୍ବା ପ୍ରୋବ୍ ଲକ୍ଷ୍ୟର ନିଜସ୍ୱ 5xx କେବେ ମଧ୍ୟ ଗଣନା କରାଯାଏ ନାହିଁ, [ପ୍ରକ୍ସି ସ୍ୱାସ୍ଥ୍ୟ ଯାଞ୍ଚ](#proxy-health-checking-v3816) ଦେଖନ୍ତୁ), ପ୍ରକ୍ସିର `status`କୁ `dead`ରେ ସେଟ୍ କରାଯାଏ। 3. `dead` ହେଉଛି ପୁଲ୍/ରୋଟେସନ୍ ରିଜୋଲ୍ୟୁସନ୍ରେ ବ୍ୟବହୃତ ସକ୍ରିୟ-ସ୍ଥିତି ଫିଲ୍ଟର୍ ଦ୍ୱାରା ବାଦ ଦିଆଯାଉଥିବା ସ୍ଥିତିଗୁଡ଼ିକ ମଧ୍ୟରୁ ଗୋଟିଏ, ତେଣୁ ଏକ ସ୍କୋପ୍ର ରୋଟେସନ୍ (ରାଉଣ୍ଡ-ରବିନ୍ / ରାଣ୍ଡମ୍ / ଷ୍ଟିକି / ଲେଟେନ୍ସି — [ରୋଟେସନ୍ କୌଶଳ ନିଷ୍ପତ୍ତି ଟ୍ରି](#rotation-strategy-decision-tree) ଦେଖନ୍ତୁ) ତୁରନ୍ତ ନୂଆ ଅନୁରୋଧଗୁଡ଼ିକୁ ସେହି ପ୍ରକ୍ସି ଦେବା ବନ୍ଦ କରେ। ପୁଲ୍ର ଅନ୍ୟ କୌଣସି ପ୍ରକ୍ସି ପ୍ରଭାବିତ ହୁଏ ନାହିଁ, ଏବଂ ସମଗ୍ର ପୁଲ୍ କେବେ ମଧ୍ୟ ନିରବରେ ଏକ ସିଧାସଳଖ ସଂଯୋଗକୁ ଫଲ୍ବ୍ୟାକ୍ କରେ ନାହିଁ — [4-ସ୍ତରୀୟ ପ୍ରକ୍ସି ସିଷ୍ଟମ୍](#4-level-proxy-system)ର ଫେଲ୍-କ୍ଲୋଜ୍ଡ ସୁରକ୍ଷା ବ୍ୟବସ୍ଥା ଦେଖନ୍ତୁ। 4. ସ୍କେଜୁଲର୍ ସମାନ ଅନ୍ତରାଳରେ `dead` ପ୍ରକ୍ସିଗୁଡ଼ିକୁ ପ୍ରୋବ୍ କରିବା ଜାରି ରଖେ। ପରବର୍ତ୍ତୀ ସଫଳ ପ୍ରୋବ୍ `status`କୁ ପୁଣି `active`ରେ ପରିବର୍ତ୍ତନ କରେ ଏବଂ ଏହା ପୁଣି ରୋଟେସନ୍ରେ ପ୍ରବେଶ କରେ — ହସ୍ତଚାଳିତ ଭାବେ ପୁନଃ ଯୋଗ କରିବା ଆବଶ୍ୟକ ନାହିଁ। ଏହାକୁ ଜାଣିଶୁଣି **ଇଚ୍ଛାଧୀନ ଏବଂ ଅବିନାଶୀ** ରଖାଯାଇଛି: ଡିଫଲ୍ଟ ଭାବେ ସ୍କେଜୁଲର୍ କେବଳ ବିଫଳତାଗୁଡ଼ିକୁ ଗଣନା ଓ ଲଗ୍ କରେ (`decision.ts`ରେ ନୀତି C ଦେଖନ୍ତୁ), ଏବଂ `PROXY_AUTO_DISABLE` କେବେ ମଧ୍ୟ ଏକ ଧାଡ଼ି ବିଲୋପ କରେ ନାହିଁ — ଏହା ପାଇଁ ଅଲଗା, ଅଧିକ ଆକ୍ରମଣାତ୍ମକ `PROXY_AUTO_REMOVE` ଫ୍ଲାଗ୍ ରହିଛି। ଯଦି ଉଭୟକୁ `true`ରେ ସେଟ୍ କରାଯାଏ, ତେବେ `PROXY_AUTO_REMOVE` ପ୍ରାଧାନ୍ୟ ପାଏ (ବିଲୋପ ହେବାକୁ ଯାଉଥିବା ଏକ ପ୍ରକ୍ସିକୁ ମଧ୍ୟବର୍ତ୍ତୀ ସାମୟିକ ଅକ୍ଷମକରଣର କୌଣସି ଆବଶ୍ୟକତା ନାହିଁ)। ସମ୍ପୂର୍ଣ୍ଣ ଭେରିଏବଲ୍ ତାଲିକା ପାଇଁ [ପରିବେଶ କନଫିଗ୍](../reference/ENVIRONMENT.md) ସନ୍ଦର୍ଭ ଦେଖନ୍ତୁ। --- > 📖 **ସମ୍ପର୍କିତ ଡକ୍ୟୁମେଣ୍ଟେସନ୍:** > > - [ବ୍ୟବହାରକାରୀ ମାର୍ଗଦର୍ଶିକା](../guides/USER_GUIDE.md) — ସାଧାରଣ ସେଟ୍ଅପ୍ ଏବଂ କନଫିଗରେସନ୍ > - [API ସନ୍ଦର୍ଭ](../reference/API_REFERENCE.md) — ସମ୍ପୂର୍ଣ୍ଣ API ଡକ୍ୟୁମେଣ୍ଟେସନ୍ > - [ପରିବେଶ କନଫିଗ୍](../reference/ENVIRONMENT.md) — ସମସ୍ତ ପରିବେଶ ଭେରିଏବଲ୍