# ЁЯМР 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рм░ рм╕рнНрмерм╛рнЯрнА рм╕рмВрм░рмХрнНрм╖рмг | --- ## рмирнВрмдрми рмЦрм╛рмдрм╛ рмкрм╛рмЗрмБ рмбрм┐рмлрм▓рнНрмЯ рмкрнНрм░рмХрнНрм╕рм┐ рм╕рнНрмерм┐рмдрм┐ред рмЗрмирнН** рм╕рнЗрмЯрм┐рмВрм╕рморнВрм╣ тЖТ рмкрнНрм░рмХрнНрм╕рм┐ тЖТ рмЧрнНрм▓рнЛрммрм╛рм▓рнН рммрм┐рмирнНрнЯрм╛рм╕рмХрм░рмгред** , рммрнНрнЯрммрм╣рм╛рм░ рмХрм░рмирнНрмдрнБред** рмирнВрмдрми рм╕рмВрмпрнЛрмЧ рмкрм╛рмЗрмБ рмбрм┐рмлрм▓рнНрмЯ рмнрм╛рммрм░рнЗ рмкрнНрм░рмХрнНрм╕рм┐ рм╕рмХрнНрм╖рмо рмХрм░рмирнНрмдрнБред** рмирнВрмдрми рмнрм╛рммрм░рнЗ рмпрнЛрмЧрм╛рмпрм╛рмЗрмерм┐рммрм╛ рмкрнНрм░рмжрм╛рмирмХрм╛рм░рнА рмЦрм╛рмдрм╛рмЧрнБрмбрм╝рм┐рмХрм░ рмкрнНрм░рм╛рм░рморнНрмнрм┐рмХ рмкрнНрм░рмХрнНрм╕рм┐ рм╕рнНрмерм┐рмдрм┐ рммрм╛рмЫрм┐рммрм╛ рмкрм╛рмЗрмБред рмирнВрмдрми рм╕рнЗрмЯрм┐рмВ рмирнВрмдрми рмпрнЛрмЧ рм╣рнЛрмЗрмерм┐рммрм╛ рмкрнНрм░рмжрм╛рмирмХрм╛рм░рнА рмЦрм╛рмдрм╛рм░ рмкрнНрм░рм╛рм░рморнНрмнрм┐рмХ рмкрнНрм░рмХрнНрм╕рм┐ рм╕рнНрмерм┐рмдрм┐рмХрнБ рмирм┐рнЯрмирнНрмдрнНрм░рмг рмХрм░рнЗред рмПрм╣рм╛ рммрм┐рмжрнНрнЯрморм╛рми рмЦрм╛рмдрм╛рмЧрнБрмбрм╝рм┐рмХрнБ рмкрм░рм┐рммрм░рнНрмдрнНрмдрми рмХрм░рнЗ рмирм╛рм╣рм┐рмБ рмХрм┐рморнНрммрм╛ рмЧрнНрм▓рнЛрммрм╛рм▓рнН рмкрнНрм░рмХрнНрм╕рм┐ рм╕рнБрмЗрмЪрнН рм╕рнНрмерм╛рмирм╛рмирнНрмдрм░ рмХрм░рнЗ рмирм╛рм╣рм┐рмБред рмПрм╣рм╛рм░ рмкрнНрм░рм╛рм░рморнНрмнрм┐рмХ рморнВрм▓рнНрнЯ рмкрнВрм░рнНрмм рмЖрмЪрм░рмгрмХрнБ рм╕рмВрм░рмХрнНрм╖рмг рмХрм░рнЗред рмбрм┐рмлрм▓рнНрмЯ рмнрм╛рммрм░рнЗ рмкрнНрм░рмХрнНрм╕рм┐ рмЕрмХрнНрм╖рмо рм╕рм╣рм┐рмд рмнрммрм┐рм╖рнНрнЯрмд рмЖрмХрм╛рмЙрмгрнНрмЯ рм╕рнГрм╖рнНрмЯрм┐ рмХрм░рм┐рммрм╛рмХрнБ рмПрм╣рм╛рмХрнБ рмерм░рнЗ рммрмирнНрмж рмХрм░рмирнНрмдрнБред рмкрнНрм░рм┐рмлрм░рнЗрмирнНрм╕ рммрм┐рмжрнНрнЯрморм╛рми рм╕рнЗрмЯрм┐рмВрм╕рморнВрм╣ API рморм╛рмзрнНрнЯрморм░рнЗ `defaultNewConnectionProxyEnabled` рмнрм╛рммрм░рнЗ рмЧрмЪрнНрмЫрм┐рмдред рмПрм╣рм╛ рмХрнЗрммрнЗ рммрм┐ рм╕рнЗрмнрнН рм╣рнЛрмЗрмирмерм┐рммрм╛рммрнЗрм│рнЗ `true` рмХрнБ рмбрм┐рмлрм▓рнНрмЯ рмХрм░рм┐рмерм╛рмПред `false` рм╕рмЮрнНрмЪрнЯ рмХрм░рм┐рммрм╛ рмкрнБрми rest рмЖрм░рморнНрмн рммрм┐рмирм╛ рмкрм░рммрм░рнНрмдрнНрмдрнА рмирнВрмдрми рмЦрм╛рмдрм╛рмЧрнБрмбрм╝рм┐рмХ рмкрм╛рмЗрмБ рмХрм╛рм░рнНрмпрнНрнЯрмХрм╛рм░рнА рм╣рнБрмПред `POST /api/providers` рмПрмХ рмЗрмЪрнНрмЫрм╛рмзрнАрми рмХрмарнЛрм░ рммрнБрм▓рм┐рнЯрм╛рмирнН `proxyEnabled` рмЧрнНрм░рм╣рмг рмХрм░рнЗ; рмПрмХ рмирм┐рм░рнНрмжрнНрмжрм┐рм╖рнНрмЯ `true` рмХрм┐рморнНрммрм╛ `false` рм╕рнГрм╖рнНрмЯрм┐ рмбрм┐рмлрм▓рнНрмЯ рмЙрмкрм░рнЗ рмкрнНрм░рм╛рмзрм╛рмирнНрнЯ рмжрнЗрмЗрмерм╛рмПред рмПрмХ рмирмХрм▓ рмЖрмХрм╛рмЙрмгрнНрмЯ рмХрм┐рморнНрммрм╛ OAuth рмкрнБрми nect рм╕рмВрмпрнЛрмЧрм░рнЗ рмЦрм╛рмдрм╛ рм╕рнЗрм╣рм┐ рмЦрм╛рмдрм╛рм░ рмЧрмЪрнНрмЫрм┐рмд рм╕рнНрмерм┐рмдрм┐рмХрнБ рм╕рмВрм░рмХрнНрм╖рмг рмХрм░рнЗред рммрнНрнЯрмХрнНрмдрм┐рмЧрмд рмЦрм╛рмдрм╛рмЧрнБрмбрм╝рм┐рмХ рмкрм░рнЗ рмормзрнНрнЯ рм╕рмХрнНрм╖рмо рмХрм┐рморнНрммрм╛ рмЕрмХрнНрм╖рмо рм╣рнЛрмЗрмкрм╛рм░рм┐рммред рмЪрнЯрмирмХрм╛рм░рнА рмкрнНрм░рмжрм╛рмирмХрм╛рм░рнА рм╕рнНрмерм╛рмирм╛рмирнНрмдрм░рмг рмирнВрмдрми рмЦрм╛рмдрм╛рмЧрнБрмбрм╝рм┐рмХ рмкрм╛рмЗрмБ рмЧрмирнНрмдрммрнНрнЯрм╕рнНрмерм│ рм╕рмВрм╕рнНрмерм╛рм░ рмбрм┐рмлрм▓рнНрмЯ рммрнНрнЯрммрм╣рм╛рм░ рмХрм░рнЗ рмПрммрмВ рммрм┐рмжрнНрнЯрморм╛рми рмЦрм╛рмдрм╛рмЧрнБрмбрм╝рм┐рмХрнБ рммрмжрм│рм╛рмЗрммрм╛ рм╕рморнЯрм░рнЗ рмЧрмирнНрмдрммрнНрнЯ рм╕рнНрмерм│ рм╕рмВрм░рмХрнНрм╖рмг рмХрм░рнЗред рмкрнНрм░рмХрнНрм╕рм┐ рмЯрнЛрмЧрм▓рнН рмкрнЛрм░рнНрмЯрнЗрммрм▓рнН рм╕рнНрмерм╛рмирм╛рмирнНрмдрм░ рмХрнНрм╖рнЗрмдрнНрм░ рмирнБрм╣рнЗрмБред рмкрнВрм░рнНрмгрнНрмг рммрнНрнЯрм╛рмХрмЕрмкрнН рмкрнБрмирм░рнБрмжрнНрмзрм╛рм░ рмПрммрмВ historical рмдрм┐рм╣рм╛рм╕рм┐рмХ JSON/SQL рм╕рнНрмерм╛рмирм╛рмирнНрмдрм░рмг рм╕рнЗрморм╛рмирмЩрнНрмХрм░ рммрм┐рмжрнНрнЯрморм╛рми рмкрнБрми restore рм╕рнНрмерм╛рмкрми рм╕рнЗрморм╛рмгрнНрмЯрм┐рмХрнНрм╕рмХрнБ рммрмЬрм╛рнЯ рм░рмЦрнЗ, рм╕рмЮрнНрмЪрм┐рмд рмЦрм╛рмдрм╛ рморнВрм▓рнНрнЯ рмПрммрмВ рмкрнБрм░рнБрмгрм╛ рм╕рнНрмХрм┐рморм╛ рмбрм┐рмлрм▓рнНрмЯрмХрнБ рмЕрмирнНрмдрм░рнНрмнрнБрмХрнНрмд рмХрм░рм┐; рмПрмХ рмкрнВрм░рнНрмгрнНрмг рм╕рнЗрмЯрм┐рмВрм╕рморнВрм╣ рмкрнБрми restore рм╕рнНрмерм╛рмкрми рмормзрнНрнЯ рмПрм╣рм┐ рмкрм╕рмирнНрмжрмХрнБ рмкрнБрми restore рм╕рнНрмерм╛рмкрми рмХрм░рм┐рмкрм╛рм░рм┐рммред рмПрм╣рм┐ рмкрм╕рмирнНрмж рмПрмХ рмкрнНрм░рмХрнНрм╕рм┐ рмирнНрнЯрм╕рнНрмд рмХрм░рнЗ рмирм╛рм╣рм┐рмБ рмХрм┐рморнНрммрм╛ рм╕рнНрмерм╛рмкрм┐рмд рмХрм░рнЗ рмпрнЗ рмЬрмгрнЗ рм╕рнБрм╕рнНрме рмХрм┐рморнНрммрм╛ рммрнНрнЯрммрм╣рм╛рм░рм░рнЗ рмЕрмЫрм┐ред рмкрнНрм░рмХрнГрмд рм░рм╛рмЙрмЯрм┐рмЩрнНрмЧрнН рмЧрнНрм▓рнЛрммрм╛рм▓рнН рмкрнНрм░рмХрнНрм╕рм┐ рм╕рнБрмЗрмЪрнН рмПрммрмВ рмкрнНрм░рмпрнБрмЬрнНрнЯ рмкрнНрм░рмХрнНрм╕рм┐ рммрм┐рмирнНрнЯрм╛рм╕ рмЙрмкрм░рнЗ рмирм┐рм░рнНрмнрм░ рмХрм░рнЗред рм╕рнНрмерм╛рнЯрнА рмЖрмХрм╛рмЙрмгрнНрмЯ рммрм┐рмирм╛ рм╕рм┐рмирнНрмернЗрмЯрм┐рмХрнН рмкрнНрм░рмжрм╛рмирмХрм╛рм░рнА, рмЦрм╛рмдрм╛ рм╕рнГрм╖рнНрмЯрм┐ рмкрнВрм░рнНрммрм░рнБ OAuth рмЯрнНрм░рм╛рмлрм┐рмХрнН, environment/system рмкрнНрм░рмХрнНрм╕рм┐, рмПрммрмВ рммрм╛рм╣рнНрнЯ рммрнНрнЯрм╛рмХрнЗрмгрнНрмбрнН рмирнЗрмЯрн▒рм╛рм░рнНрмХрм┐рмВ рмПрм╣рм╛рм░ рмкрм░рм┐рм╕рм░ рммрм╛рм╣рм╛рм░рнЗред ## 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) тАФ рм╕рморм╕рнНрмд рмкрм░рм┐рммрнЗрм╢ рмнрнЗрм░рм┐рмПрммрм▓рнН