# 🌐 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) · 🇭🇷 [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) - [डैशबोर्ड UI](#dashboard-ui) - [API संदर्भ](#api-reference) - [एनवायरनमेंट वेरिएबल](#environment-variables) - [समस्या निवारण](#troubleshooting) --- ## प्रॉक्सी का उपयोग क्यों करें? कई AI प्रदाता भौगोलिक क्षेत्र के आधार पर पहुँच प्रतिबंधित करते हैं। **रूस, चीन, ईरान, क्यूबा, तुर्की** और अन्य देशों के डेवलपर इस प्रकार की त्रुटियों का सामना करते हैं: ``` unsupported_country_region_territory ``` अवरुद्ध क्षेत्रों के बाहर भी प्रॉक्सी इन उद्देश्यों के लिए उपयोगी हैं: | उपयोग का मामला | विवरण | | ------------------ | -------------------------------------------------------------- | | **भौगोलिक बायपास** | अवरुद्ध देशों से OpenAI, Anthropic, Codex, Copilot तक पहुँचें | | **IP रोटेशन** | दर सीमित होने से बचने के लिए अनुरोधों को कई IP में वितरित करें | | **गोपनीयता** | अपस्ट्रीम प्रदाताओं से अपना वास्तविक IP छिपाएँ | | **अनुपालन** | ट्रैफ़िक को विशिष्ट न्यायक्षेत्रों के माध्यम से रूट करें | | **परीक्षण** | विभिन्न क्षेत्रों से आने वाले अनुरोधों का अनुकरण करें | --- ## आर्किटेक्चर का अवलोकन ``` ┌───────────────────────────────────────────────────────────────┐ │ OmniRoute सर्वर │ │ │ │ ┌─────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ प्रॉक्सी │ │ प्रॉक्सी │ │ प्रॉक्सी │ │ │ │ रजिस्ट्री │───▶│ डिस्पैचर │───▶│ फ़ेच (undici) │ │ │ │ (SQLite) │ │ (कैश किया गया)│ │ │ │ │ └─────────────┘ └──────────────┘ └────────┬─────────┘ │ │ ▲ │ │ │ │ ▼ │ │ ┌──────┴──────┐ ┌──────────────────┐ │ │ │ 1proxy सिंक │ │ अपस्ट्रीम │ │ │ │ (निःशुल्क पूल)│ │ प्रदाता API │ │ │ └─────────────┘ └──────────────────┘ │ └───────────────────────────────────────────────────────────────┘ ``` ### प्रमुख घटक | घटक | फ़ाइल | भूमिका | | ---------------------- | -------------------------------------------- | ---------------------------------------------------------- | | **प्रॉक्सी रजिस्ट्री** | `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` | रजिस्ट्री CRUD API (GET/POST/PATCH/DELETE) | | **1proxy DB** | `src/lib/db/oneproxy.ts` | निःशुल्क प्रॉक्सी मार्केटप्लेस के डेटा का स्थायी संग्रहण | --- ## 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. **Settings → Proxy** पर जाएँ 2. **Add 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" }' ``` ### प्रॉक्सी अपडेट करना ```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. **Dashboard → Settings → Backup** पर जाएँ 2. **Export** पर क्लिक करें — प्रॉक्सी रजिस्ट्री और असाइनमेंट शामिल होते हैं 3. रीस्टोर करने के लिए, **Import** पर क्लिक करें और बैकअप फ़ाइल अपलोड करें प्रॉक्सी रजिस्ट्री **host+port द्वारा upsert** का भी समर्थन करती है — यदि आप पहले से मौजूद प्रॉक्सी (समान होस्ट और पोर्ट) को इम्पोर्ट करते हैं, तो डुप्लिकेट बनाने के बजाय उसे अपडेट किया जाता है। ### लेगेसी माइग्रेशन यदि आपने किसी पुराने संस्करण (registry से पहले के संस्करण) में proxies कॉन्फ़िगर किए थे, तो OmniRoute उन्हें स्वचालित रूप से माइग्रेट करता है: ``` Legacy 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 │ ────────────▶ │ प्रदाता │ │ (बाहरी) │ अधिकतम │ source=oneproxy │ गुणवत्ता से │ API │ └─────────────┘ 500 प्रॉक्सी └─────────────────┘ └──────────┘ ``` 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` | 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`) HTTP हेडर और JSON बॉडी फ़ील्ड को फिर से क्रमबद्ध करता है, ताकि वे नेटिव CLI बाइनरी (Claude Code, Codex, आदि) के सटीक सिग्नेचर से मेल खाएँ। यह प्रॉक्सी के **ऊपर** काम करता है: ``` आपका 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: 0`) - बार-बार होने वाले हैंडशेक से बचने के लिए डिस्पैचर कैश करके यदि समस्या बनी रहती है, तो कोई दूसरा प्रॉक्सी आज़माएँ या 1proxy रोटेशन सुविधा का उपयोग करें। ### OAuth के दौरान "unsupported_country_region_territory" सुनिश्चित करें कि OAuth प्रवाह शुरू करने से **पहले** प्रॉक्सी कॉन्फ़िगर किया गया है। OmniRoute, 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, -- पारदर्शी/अनाम/एलीट 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`) एक त्वरित 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` | हेल्थ परिणाम को कितनी देर तक कैश किया जाए | **अनुशंसित मान:** | परिदृश्य | फ़ास्ट-फ़ेल टाइमआउट | कैश 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"); ``` जब कैश एंट्री `HEALTH_CACHE_TTL_MS` से अधिक पुरानी हो जाती है, तो `stale` फ़्लैग `true` होता है और अगला अनुरोध नई जाँच शुरू करेगा। ### प्रत्येक प्रॉक्सी प्रकार के डिफ़ॉल्ट हेल्थ जाँच URL स्कीम के आधार पर उपयुक्त डिफ़ॉल्ट का उपयोग करती है: | स्कीम | डिफ़ॉल्ट पोर्ट | | -------------------------- | -------------- | | `http://` | 8080 | | `https://` | 443 | | `socks5://` / `socks5h://` | 1080 | URL में दिए गए कस्टम पोर्ट (`http://host:9999`) को हमेशा स्कीम के डिफ़ॉल्ट से प्राथमिकता मिलती है। --- ## प्रॉक्सी एनालिटिक्स और ऑब्ज़र्वेबिलिटी 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) — सभी एनवायरनमेंट वेरिएबल