* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line â the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
46 KiB
ð OmniRoute Proxy Guide (æ¥æ¬èª)
ð Languages: ðºðž English · ðªð¹ am · ðžðŠ ar · ðŠð¿ az · ð§ð¬ bg · ð§ð© bn · ðšð¿ cs · ð©ð° da · ð©ðª de · ð¬ð· el · ðªðž es · ðªðª et · ð®ð· fa · ð«ð® fi · ð«ð· fr · ð®ðª ga · ð®ð³ gu · ð³ð¬ ha · ð®ð± he · ð®ð³ hi · ðð· hr · ððº hu · ðŠð² hy · ð®ð© id · ð³ð¬ ig · ð®ð¹ it · ð¬ðª ka · ð°ð km · ð®ð³ kn · ð°ð· ko · ð±ð¹ lt · ð±ð» lv · ð®ð³ ml · ð®ð³ mr · ð²ðŸ ms · ð²ð¹ mt · ð²ð² my · ð³ðµ ne · ð³ð± nl · ð³ðŽ no · ð®ð³ or · ð®ð³ pa · ðµð phi · ðµð± pl · ðµð¹ pt · ð§ð· pt-BR · ð·ðŽ ro · ð·ðº ru · ð±ð° si · ðžð° sk · ðžð® sl · ð·ðž sr · ðžðª sv · ð°ðª sw · ð®ð³ ta · ð®ð³ te · ð¹ð th · ð¹ð· tr · ðºðŠ uk-UA · ðµð° ur · ðºð¿ uz · ð»ð³ vi · ð³ð¬ yo · ðšð³ zh-CN · ð¹ðŒ zh-TW
å°ççãªãããã¯ãåé¿ããå人æ å ±ãä¿è·ããªããããããããããã·çµç±ã§ AI ãã©ãã£ãã¯ãã«ãŒãã£ã³ã° â è€éãªèšå®ã¯äžåäžèŠã§ãã
OmniRoute ã«ã¯ãäžæµã® AI ãããã€ããŒãžã®ãã©ãã£ãã¯ã HTTPãHTTPSããŸã㯠SOCKS5 ãããã·çµç±ã§ã«ãŒãã£ã³ã°ã§ããããã«æ©èœã®ãããã·ç®¡çã·ã¹ãã ãå«ãŸããŠããŸãããããã¯å¯Ÿè±¡å°åã«ããå ŽåãIP ããŒããŒã·ã§ã³ãå¿ èŠãªå Žåãã¹ãã«ã¹ãã£ã³ã¬ãŒããªã³ãã£ã³ã°ã䜿çšãããå Žåãªã©ããã®ã¬ã€ãã§ã¯å¿ èŠãªæ å ±ããã¹ãŠèª¬æããŸãã
ç®æ¬¡
- ãããã·ã䜿çšããçç±
- ã¢ãŒããã¯ãã£ã®æŠèŠ
- 4 段éã®ãããã·ã·ã¹ãã
- ãããã·ã¬ãžã¹ããªïŒCRUDïŒ
- 1proxy ç¡æããŒã±ãããã¬ã€ã¹
- ãããã·ããŒããŒã·ã§ã³
- æ€åºåé¿ãšã¹ãã«ã¹
- äžæµãããã·ã¢ãŒã
- ããã·ã¥ããŒã UI
- API ãªãã¡ã¬ã³ã¹
- ç°å¢å€æ°
- ãã©ãã«ã·ã¥ãŒãã£ã³ã°
ãããã·ã䜿çšããçç±
å€ãã® AI ãããã€ããŒã¯ãå°åã«åºã¥ããŠã¢ã¯ã»ã¹ãå¶éããŠããŸãããã·ã¢ãäžåœãã€ã©ã³ããã¥ãŒãããã«ã³ãªã©ã®åœã«ããéçºè ã¯ã次ã®ãããªãšã©ãŒã«ééããŸãã
unsupported_country_region_territory
ãããã¯å¯Ÿè±¡å°åå€ã§ãã£ãŠãããããã·ã¯æ¬¡ã®çšéã«åœ¹ç«ã¡ãŸãã
| ãŠãŒã¹ã±ãŒã¹ | 説æ |
|---|---|
| å°åå¶éã®åé¿ | ãããã¯å¯Ÿè±¡åœãã OpenAIãAnthropicãCodexãCopilot ã«ã¢ã¯ã»ã¹ãã |
| IP ããŒããŒã·ã§ã³ | ã¬ãŒãå¶éãåé¿ãããããè€æ°ã® IP ã«ãªã¯ãšã¹ãã忣ãã |
| ãã©ã€ãã·ãŒ | äžæµãããã€ããŒããå®éã® IP ãé ã |
| ã³ã³ãã©ã€ã¢ã³ã¹ | ç¹å®ã®ç®¡èœåºåãçµç±ããŠãã©ãã£ãã¯ãã«ãŒãã£ã³ã°ãã |
| ãã¹ã | ç°ãªãå°åããã®ãªã¯ãšã¹ããã·ãã¥ã¬ãŒããã |
ã¢ãŒããã¯ãã£ã®æŠèŠ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â OmniRoute ãµãŒã㌠â
â â
â âââââââââââââââ ââââââââââââââââ ââââââââââââââââââââ â
â â ãããã· â â ãããã· â â ãããã· â â
â â ã¬ãžã¹ã㪠âââââ¶â ãã£ã¹ãããã£ãŒâââââ¶â FetchïŒundiciïŒ â â
â âïŒSQLiteïŒ â âïŒãã£ãã·ã¥æžã¿ïŒâ â â â
â âââââââââââââââ ââââââââââââââââ ââââââââââ¬ââââââââââ â
â â² â â
â â ⌠â
â ââââââââŽâââââââ ââââââââââââââââââââ â
â â 1proxy åæ â â äžæµ â â
â âïŒç¡æããŒã«ïŒ â â ãããã€ã㌠API â â
â âââââââââââââââ ââââââââââââââââââââ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
äž»èŠã³ã³ããŒãã³ã
| ã³ã³ããŒãã³ã | ãã¡ã€ã« | åœ¹å² |
|---|---|---|
| ãããã·ã¬ãžã¹ã㪠| src/lib/db/proxies.ts |
ãããã·ãšã³ããªãšã¹ã³ãŒãå²ãåœãŠã® CRUD |
| ãããã·ãã£ã¹ãããã£ãŒ | open-sse/utils/proxyDispatcher.ts |
ãã£ãã·ã¥æ©èœãåãã undici ProxyAgent/SOCKS ãã£ã¹ãããã£ãŒãäœæãã |
| ãããã· Fetch | 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ã¯ãåªå é äœã«åŸã£ãŠè§£æ±ºããã4ã€ã®ç¬ç«ããã¹ã³ãŒãã§ã®ãããã·èšå®ããµããŒãããŠããŸãã
åªå
é äœã«ãã解決é åºïŒæé« â æäœïŒ:
1. ðµ ã¢ã«ãŠã³ã/æ¥ç¶ãããã· â APIããŒ/OAuthæ¥ç¶ããš
2. ð¡ ãããã€ããŒãããã· â ãããã€ããŒããšïŒäŸ: ãã¹ãŠã®OpenAIãã©ãã£ãã¯ïŒ
3. ð ã³ã³ããããã· â ã³ã³ã/ã«ãŒãã£ã³ã°èšå®ããš
4. ð¢ ã°ããŒãã«ãããã· â ãã¹ãŠã®ãã©ãã£ãã¯ããã¹ãŠã®ãããã€ããŒ
解決ã®ä»çµã¿
OmniRouteãã¢ããã¹ããªãŒã ãããã€ããŒã«ãªã¯ãšã¹ããéä¿¡ãããšãresolveProxyForConnectionFromRegistry()ãåŒã³åºãããåã¬ãã«ãé çªã«ç¢ºèªãããŸãã
- ã¢ã«ãŠã³ãã¬ãã« â ãã®ç¹å®ã®æ¥ç¶IDã«ãããã·ãå²ãåœãŠãããŠãããïŒ
- ãããã€ããŒã¬ãã« â ãã®ãããã€ããŒïŒäŸ:
openaiïŒã«ãããã·ãå²ãåœãŠãããŠãããïŒ - ã°ããŒãã«ã¬ãã« â ã°ããŒãã«ãããã·ãèšå®ãããŠãããïŒ
- ãããã·ãªã â ãããã€ããŒã«çŽæ¥æ¥ç¶ããŸãã
æåã«äžèŽããèšå®ã䜿çšãããŸããã€ãŸããã°ããŒãã«ãããã·ããã©ãŒã«ããã¯ãšããŠèšå®ããç¹å®ã®ãããã€ããŒãæ¥ç¶ã«å¯ŸããŠäžæžãã§ããŸãã
ãããã·çµç±ãšãªã察象
| ãã©ãã£ãã¯ã®çš®é¡ | ãããã·çµç±ïŒ | åè |
|---|---|---|
| ãã£ããè£å® | â | ãã¹ãŠã®/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 |
ãããã·ã®äœæ
ããã·ã¥ããŒããã:
- èšå® â ãããã·ã«ç§»åããŸã
- ãããã·ã远å ãã¯ãªãã¯ããŸã
- ã¿ã€ãããã¹ããããŒããããã³ä»»æã®èªèšŒæ å ±ãå ¥åããŸã
- ä¿åããŸã
APIãã:
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"
}'
ãããã·ã®æŽæ°
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ã«ç©ºæååãéä¿¡ããå Žåãä¿åæžã¿ã®å€ãç¶æãããŸãã
ãããã·ã®åé€
# ãããã·ãããããã®ã¹ã³ãŒãã«å²ãåœãŠãããŠããå Žåã¯å€±æ
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"
ãããã·ã®äžèŠ§è¡šç€º
curl "http://localhost:20128/api/v1/management/proxies?limit=50&offset=0"
ã¹ã³ãŒããžã®ãããã·ã®å²ãåœãŠ
# ã°ããŒãã«ã¹ã³ãŒãã«å²ãåœãŠ
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}}'
æå¹ãªãããã·ã®è§£æ±º
æå®ããæ¥ç¶ã«ã©ã®ãããã·ã䜿çšããããã確èªããŸãã
curl "http://localhost:20128/api/settings/proxy?resolve=connection-uuid"
解決ããããããã·ãããã®ã¬ãã«ïŒaccountãproviderããŸãã¯globalïŒããã³ãœãŒã¹ãšãšãã«è¿ãããŸãã
äžæ¬å²ãåœãŠ
1ã€ã®ãããã·ãè€æ°ã®ãããã€ããŒãŸãã¯æ¥ç¶ã«äžæ¬ã§å²ãåœãŠãŸãã
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èšå®ããšã¯ã¹ããŒãããå Žå:
- ããã·ã¥ããŒã â èšå® â ããã¯ã¢ããã«ç§»åããŸã
- ãšã¯ã¹ããŒããã¯ãªãã¯ããŸã â ãããã·ã¬ãžã¹ããªãšå²ãåœãŠãå«ãŸããŸã
- 埩å ããã«ã¯ãã€ã³ããŒããã¯ãªãã¯ããŠããã¯ã¢ãããã¡ã€ã«ãã¢ããããŒãããŸã
ãããã·ã¬ãžã¹ããªã¯ãhost+portã«ããupsertããµããŒãããŠããŸãããã§ã«ååšãããããã·ïŒãã¹ããšããŒããåãïŒãã€ã³ããŒããããšãéè€ãäœæãã代ããã«æ¢åã®ãããã·ãæŽæ°ãããŸãã
ã¬ã¬ã·ãŒãã€ã°ã¬ãŒã·ã§ã³
以åã®ããŒãžã§ã³ïŒã¬ãžã¹ããªå°å ¥åïŒã§ãããã·ãèšå®ããŠããå ŽåãOmniRoute ã¯ããããèªåçã«ç§»è¡ããŸãã
åŸæ¥ã® key_value ã¹ã㢠â proxy_registry + proxy_assignments
ãã®åŠçã¯ãã¢ããã°ã¬ãŒãåŸã®ååèµ·åæã«äžåºŠã ãå®è¡ãããŸããåå®è¡ããã«ã¯ãmigrateLegacyProxyConfigToRegistry({ force: true }) ã䜿çšããŠãã ããã
1proxy ç¡æãããã·ããŒã±ãããã¬ã€ã¹
ð @oyi77 ã«ããã³ã³ããªãã¥ãŒã·ã§ã³ â PR #1847ïŒIssue #1788ïŒ
OmniRoute 㯠1proxy ã³ãã¥ããã£ãã©ãããã©ãŒã ãšçµ±åãããŠãããäžçäžã®æ€èšŒæžã¿ç¡æãããã·æ°çŸä»¶ãå©çšã§ããŸããç¬èªã®ãããã·ã€ã³ãã©ã¹ãã©ã¯ãã£ãæããªããŠãŒã¶ãŒã«æé©ã§ãã
ä»çµã¿
âââââââââââââââ åæ âââââââââââââââââââ ããŒããŒã·ã§ã³ ââââââââââââââ
â 1proxy API â âââââââââââ¶ â proxy_registry â âââââââââââââââ¶ â ãããã€ã㌠â
â ïŒå€éšïŒ â æå€§500ä»¶ â source=oneproxy â å質é â API â
âââââââââââââââ ãããã· âââââââââââââââââââ ââââââââââââââ
- åæ â OmniRoute ã 1proxy API ããæ€èšŒæžã¿ãããã·ãååŸããŸã
- ä¿å â ãããã·ã¯
source = 'oneproxy'ãšããŠåãproxy_registryããŒãã«ã«ä¿åãããŸã - ãã£ã«ã¿ãªã³ã° â ãããã³ã«ãåœãå質ã¹ã³ã¢ã§ãã£ã«ã¿ãªã³ã°ããŸã
- ããŒããŒã·ã§ã³ â å質ãã©ã³ãã ããŸãã¯é 次æŠç¥ã䜿çšããŠæé©ãªãããã·ãéžæããŸã
- èªåå£å â 倱æãããããã·ã®å質ã¹ã³ã¢ãäžãããããå€ãäžåããšéã¢ã¯ãã£ããšããŠããŒã¯ããŸã
ãããã·ã®åæ
ããã·ã¥ããŒãããïŒ
- Settings â 1proxy ã¿ãã«ç§»åããŸã
- **ãSync Nowã**ãã¯ãªãã¯ããŸã
- çµ±èšæ å ±ïŒãããã·ç·æ°ãã¢ã¯ãã£ãæ°ãå¹³åå質ãåœå¥å èš³ïŒã確èªããŸã
API ããïŒ
# åæãéå§
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 }
ãããã·ã®ãã£ã«ã¿ãªã³ã°
# ãããã³ã«ã§ãã£ã«ã¿ãªã³ã°
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 |
2æåã® ISO åœã³ãŒã |
lastValidated |
æçµæ€èšŒæã®ã¿ã€ã ã¹ã¿ã³ã |
å質ã¹ã³ã¢ã¯åçã«èª¿æŽãããŸãïŒ
- 倱æãããªã¯ãšã¹ãããšã«ã¹ã³ã¢ã10ãã€ã³ãäžãããŸã
- ã¹ã³ã¢ã10以äžã«äœäž â ãããã·ã
inactiveãšããŠããŒã¯ãããŸã - éã¢ã¯ãã£ããªãããã·ã¯ããŒããŒã·ã§ã³ããé€å€ãããŸã
ããŒããŒã·ã§ã³æŠç¥
# å質é ã«ããŒããŒã·ã§ã³ïŒæé©ãªãããã·ãåªå
ïŒâ ããã©ã«ã
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 ãããã·ã®åé€
# 1ä»¶ã® 1proxy ãããã·ãåé€
curl -X DELETE "http://localhost:20128/api/settings/oneproxy?id=proxy-uuid"
# ãã¹ãŠã® 1proxy ãããã·ãåé€ïŒæåãããã·ã«ã¯åœ±é¿ããŸããïŒ
curl -X DELETE "http://localhost:20128/api/settings/oneproxy?clearAll=1"
æ€åºåé¿ãšã¹ãã«ã¹
OmniRoute ã¯åã«ãããã·çµç±ã§ãã©ãã£ãã¯ãã«ãŒãã£ã³ã°ããã ãã§ã¯ãªãããã©ãã£ãã¯ãæ£èŠã®ãã®ã«èŠããŸãã
TLS ãã£ã³ã¬ãŒããªã³ãã®åœè£
wreq-js ã䜿çšããŠãã©ãŠã¶ãŒã®ãã㪠TLS ãã£ã³ã¬ãŒããªã³ããçæãããã©ãŠã¶ãŒä»¥å€ã® TLS ãã³ãã·ã§ã€ã¯ãæ€åºãããããæ€åºã·ã¹ãã ãåé¿ããŸãã
CLI ãã£ã³ã¬ãŒããªã³ãã®äžèŽ
CLI ãã£ã³ã¬ãŒããªã³ãåãæ¿ãïŒèšå® â ã»ãã¥ãªãã£ïŒã¯ãHTTP ããããŒãš JSON ããã£ãã£ãŒã«ããäžŠã¹æ¿ãããã€ãã£ã CLI ãã€ããªïŒClaude CodeãCodex ãªã©ïŒã®ã·ã°ããã£ãšæ£ç¢ºã«äžèŽãããŸããããã¯ãããã·ã«è¿œå ããŠæ©èœããŸãã
ããªãã® IPïŒãããã¯å¯Ÿè±¡ïŒâ ãããã· IPïŒç±³åœïŒâ ãããã€ã㌠API
+ TLS åœè£
+ CLI ãã£ã³ã¬ãŒããªã³ã
IP ãã¹ãã³ã°ãšãªã¯ãšã¹ãã®çæ£æ§ãåæã«å®çŸã§ããŸãã
ãããã· IP ã®ç¶æ
ããã·ã¥ããŒãã®è²åãããããããžã«ãã©ã®ãããã·ã¬ãã«ãæå¹ãã衚瀺ãããŸãã
| ãããž | ã¬ãã« | æå³ |
|---|---|---|
| ð¢ | ã°ããŒãã« | ãã¹ãŠã®ãã©ãã£ãã¯ããã®ãããã·ãçµç±ããŸã |
| ð¡ | ãããã€ã㌠| ãã®ãããã€ããŒã®ãã©ãã£ãã¯ã®ã¿ããããã·ãããŸã |
| ðµ | æ¥ç¶ | ãã®ç¹å®ã®ããŒïŒã¢ã«ãŠã³ãããã®ãããã·ã䜿çšããŸã |
ãããžã«ã¯ã確èªçšã«åå解決ããããããã· IP ã衚瀺ãããŸãã
ã¢ããã¹ããªãŒã ãããã·ã¢ãŒã
CLIProxyAPI ãã¿ãŒã³ã䜿çšãããããã€ããŒåãã«ãOmniRoute 㯠3 ã€ã®ã¢ããã¹ããªãŒã ãããã·ã¢ãŒãããµããŒãããŠããŸãã
| ã¢ãŒã | 説æ |
|---|---|
native |
OmniRoute ããããã·ã«ãŒãã£ã³ã°ãçŽæ¥åŠçããŸãïŒããã©ã«ãïŒ |
cliproxyapi |
å€éšã® CLIProxyAPI ã€ã³ã¹ã¿ã³ã¹ã«åŠçãå§ä»»ããŸã |
fallback |
æåã« native ã詊ãã倱æããå Žå㯠CLIProxyAPI ã䜿çšããŸã |
ãããã€ããŒããšã«èšå®ããŸãã
curl -X PUT "http://localhost:20128/api/upstream-proxy/openai" \
-H "Content-Type: application/json" \
-d '{"mode": "native", "enabled": true}'
ããã·ã¥ããŒã UI
èšå® â ãããã·ã¿ã
- ã°ããŒãã«ãããã·ã®èšå®ïŒãã¹ãŠã®ãã©ãã£ãã¯ã«å¯ŸããŠäžåºŠã ãèšå®ïŒ
- ãããã€ããŒããšã®ãããã·ã«ãããªãŒããŒã©ã€ã
- æ¥ç¶ããšã®ãããã·ã®å²ãåœãŠ
- èšå®æžã¿ãããã·çµç±ã®æ¥ç¶ãã¹ã
- æå¹ãªãããã·ã¬ãã«ã瀺ãè²åãããããããž
èšå® â 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 ãåç
§ããŠãã ããããã³ãã« 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 |
1 ä»¶ãåé€ |
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 proxy is disabledã
.envãã¡ã€ã«ã§ENABLE_SOCKS5_PROXY=trueãèšå®ããåèµ·åããŠãã ããã
ãããã·çµç±ã§ãsocket hang upããšã©ãŒãçºçãã
ã¢ã€ãã«ç¶æ ã®æ¥ç¶ãåæããå®äŸ¡ãªãããã·ã§ã¯ãããã¯æ£åžžãªåäœã§ããOmniRouteã§ã¯ã以äžã®æ¹æ³ã§ãã§ã«å¯ŸåŠããŠããŸãã
- ãããã·æ¥ç¶ã®ããŒãã¢ã©ã€ããç¡å¹åïŒ
keepAliveTimeout: 1ïŒ - ãã€ãã©ã€ã³åŠçãç¡å¹åïŒ
pipelining: 0ïŒ - ãã£ã¹ãããã£ãŒããã£ãã·ã¥ãããã³ãã·ã§ã€ã¯ã®ç¹°ãè¿ããåé¿
åé¡ãè§£æ¶ããªãå Žåã¯ãå¥ã®ãããã·ã詊ããã1proxyã®ããŒããŒã·ã§ã³æ©èœã䜿çšããŠãã ããã
OAuthäžã«ãunsupported_country_region_territoryããçºçãã
OAuthãããŒãéå§ããåã«ãããã·ãèšå®ãããŠããããšã確èªããŠãã ãããOmniRouteã¯ãèšå®ããããããã·ãçµç±ããŠOAuthããŒã¯ã³äº€æãè¡ããŸããæåã«ã°ããŒãã«ãããã·ãŸãã¯ãããã€ããŒã¬ãã«ã®ãããã·ãèšå®ããŠãããæ¥ç¶ããŠãã ããã
ãããã·ã䜿çšãããªã
解決ã®åªå é äœã確èªããŠãã ããã
GET /api/settings/proxy?resolve=your-connection-idã§ç¢ºèªãã- ãããã·ã®
statusãactiveïŒinactiveã§ã¯ãªãïŒã§ããããšã確èªãã - ãããã·å²ãåœãŠã®ã¹ã³ãŒããæ¥ç¶ãšäžèŽããŠããããšã確èªãã
1proxyã®åæã«å€±æãã
åæã¹ããŒã¿ã¹ã確èªããŠãã ããã
curl "http://localhost:20128/api/settings/oneproxy?action=status"
consecutiveFailures >= 5ã®å ŽåããµãŒããããã¬ãŒã«ãŒãäœåããŠããŸãããµãŒããŒãåèµ·åããŠãªã»ããããããæåã§ãªã»ããããããŸã§åŸ
ã£ãŠãã ããã
ããŒã¿ããŒã¹ã¹ããŒã
proxy_registryããŒãã«
CREATE TABLE proxy_registry (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
type TEXT NOT NULL DEFAULT 'http',
host TEXT NOT NULL,
port INTEGER NOT NULL,
username TEXT DEFAULT '',
password TEXT DEFAULT '',
region TEXT,
notes TEXT,
status TEXT DEFAULT 'active',
source TEXT NOT NULL DEFAULT 'manual', -- 'manual'ãŸãã¯'oneproxy'
quality_score INTEGER, -- 0ïœ100ïŒ1proxyã®ã¿ïŒ
latency_ms INTEGER, -- ããªç§ïŒ1proxyã®ã¿ïŒ
anonymity TEXT, -- transparent/anonymous/elite
google_access INTEGER DEFAULT 0, -- Googleã«ã¢ã¯ã»ã¹å¯èœãïŒïŒ1proxyïŒ
last_validated TEXT, -- ISOã¿ã€ã ã¹ã¿ã³ãïŒ1proxyïŒ
country_code TEXT, -- ISO 2æåã³ãŒãïŒ1proxyïŒ
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
proxy_assignmentsããŒãã«
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æ¥ç¶ãã§ãã¯ã«ãã£ãŠ2ç§æªæºã§åæ¢äžã®ãããã·ãæ€åºãããªã¯ãšã¹ãããšã®ãªãŒããŒããããé¿ããããã«çµæããã£ãã·ã¥ããŸãã
åäœã®ä»çµã¿
ãªã¯ãšã¹ã âââ¶ ProxyHealthCache.get(url)
â
ââ ãã£ãã·ã¥ãããïŒæå¹ïŒ âââ¶ ãã£ãã·ã¥ãããã¹ããŒã¿ã¹ãè¿ã
â
ââ ãã£ãã·ã¥ãã¹ïŒæéåãïŒ âââ¶ host:portã«TCPæ¥ç¶
ïŒã¿ã€ã ã¢ãŠãïŒFAST_FAIL_TIMEOUT_MSïŒ
âââ¶ HEALTH_CACHE_TTL_MSã®éãã£ãã·ã¥
âââ¶ çµæãè¿ã
ãã®ä»çµã¿ããªãå Žåã忢äžã®ãããã·ã¯å€±æãããŸã§ããã¹ãŠã®ãªã¯ãšã¹ããPROXY_TIMEOUT_MSã®å
šæéïŒããã©ã«ãã¯30ç§ïŒãããã¯ããŸãã
調æŽå¯èœãªç°å¢å€æ°
| 倿° | ããã©ã«ã | çšé |
|---|---|---|
PROXY_FAST_FAIL_TIMEOUT_MS |
2000 |
ãã«ã¹ãã§ãã¯ããšã®TCPæ¥ç¶ã¿ã€ã ã¢ãŠã |
PROXY_HEALTH_CACHE_TTL_MS |
30000 |
ãã«ã¹ãã§ãã¯çµæããã£ãã·ã¥ããæé |
æšå¥šå€ïŒ
| ã·ããªãª | é«é倱æã¿ã€ã ã¢ãŠã | ãã£ãã·ã¥TTL | çç± |
|---|---|---|---|
| é«ã¹ã«ãŒãããAPIã²ãŒããŠã§ã€ | 1500ms | 60000ms | ç©æ¥µçã«æ©æå€±æããããã£ãã·ã¥ãé·ãããŠãã§ãã¯åæ°ãåæž |
| å°ççã«åæ£ããããŒã | 3000ms | 15000ms | äœéãªãããã¯ãŒã¯ã«ã¯é·ãæéãå¿ èŠããã£ãã·ã¥ãçãããŠè¿ éã«ãã§ã€ã«ãªãŒã㌠|
| éçºïŒãã¹ã | 1000ms | 10000ms | ããŒã«ã«ãããã·ã§è¿ éã«å埩 |
| ã¹ãã«ã¹ïŒæ€åºåé¿ | 2500ms | 45000ms | ã¬ãŒãå¶éãåŒãèµ·ããå¯èœæ§ãããçæéã§ã®ç¹°ãè¿ããã§ãã¯ãåé¿ |
ãããã·ã®ãã«ã¹ç¶æ ã確èªãã
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 |
ããŒã¿ãžã®ã¢ã¯ã»ã¹
# æè¿ã®ãããã·ã€ãã³ã
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 ã§ãéèšãã¥ãŒãæäŸãããå ŽåããããŸãã
äžè¬çãªãã¿ãŒã³
äžå®å®ãªãããã·ãæ€åºããïŒæåãšå€±æãç¹°ãè¿ãå ŽåïŒïŒ
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 ã¬ã€ãã³ã·ã 2 ç§ãè¶ ããå ŽåïŒïŒ
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 ããŒã±ãããã¬ã€ã¹ããŒã«ã§ã¯ãé害ãçºçãããããã·ããã§ã«èªåçã«éæ ŒãããŸãïŒãããã·å質ã¹ã³ã¢ãåç
§ïŒãã¬ãžã¹ããªã«èªèº«ã§è¿œå ãããããã·ã«ã€ããŠã¯ãããã¯ã°ã©ãŠã³ãã®ãã«ã¹ã¹ã±ãžã¥ãŒã©ãŒïŒsrc/lib/proxyHealth/scheduler.tsïŒã«ãããäœãåé€ããããšãªããåæ§ã«ã忢ããã¡ã³ããŒããã§ãŒã³ããèªåçã«é€å€ãããåäœãå®çŸã§ããŸãã
# .env â 3åé£ç¶ã§ãããŒãã«å€±æããåŸããããã·ããœããç¡å¹åãã
# ãããŒããžã®å¿çãåéããããèªåçã«åæå¹åããŸãã
PROXY_AUTO_DISABLE=true
PROXY_AUTO_REMOVE_AFTER=3
ãã«ããããã·ãã§ãŒã³ã§ã®åäœïŒ
- ã¹ã±ãžã¥ãŒã©ãŒã¯ãç»é²ãããŠãããã¹ãŠã®ãããã·ã
PROXY_HEALTH_INTERVAL_MSããšã«ãããŒãããŸãïŒããã©ã«ãã¯10åãæå°ã¯1åïŒã PROXY_AUTO_REMOVE_AFTERåé£ç¶ã§ç¢ºå®çãªé害ïŒå®éã®æ¥ç¶é害ãã¿ã€ã ã¢ãŠãããããŒã察象èªäœã® 5xx ã¯ã«ãŠã³ããããŸããããããã·ãã«ã¹ãã§ãã¯ãåç §ïŒãçºçãããšããããã·ã®statusãdeadã«èšå®ãããŸããdeadã¯ãããŒã«ïŒããŒããŒã·ã§ã³ã®è§£æ±ºæã«äœ¿çšããã皌åã¹ããŒã¿ã¹ãã£ã«ã¿ãŒã«ãã£ãŠé€å€ãããã¹ããŒã¿ã¹ã®1ã€ã§ãããã®ãããã¹ã³ãŒãã®ããŒããŒã·ã§ã³ïŒã©ãŠã³ãããã³ïŒã©ã³ãã ïŒã¹ãã£ãããŒïŒã¬ã€ãã³ã·ãŒãããŒããŒã·ã§ã³æŠç¥ã®æ±ºå®æšãåç §ïŒã¯ãæ°ãããªã¯ãšã¹ããžã®ãã®ãããã·ã®å²ãåœãŠãçŽã¡ã«åæ¢ããŸããããŒã«å ã®ä»ã®ãããã·ã«ã¯åœ±é¿ãããããŒã«å šäœãæé»çã«çŽæ¥æ¥ç¶ãžãã©ãŒã«ããã¯ããããšããããŸããã4段éãããã·ã·ã¹ãã ã®ãã§ã€ã«ã¯ããŒãºä¿è·ãåç §ããŠãã ããã- ã¹ã±ãžã¥ãŒã©ãŒã¯ãåãééã§
deadãããã·ã®ãããŒããç¶ç¶ããŸããæ¬¡ã®ãããŒããæåãããšstatusãactiveã«æ»ãããã®ãããã·ã¯ããŒããŒã·ã§ã³ã«ååå ããŸããæåã§å远å ããå¿ èŠã¯ãããŸããã
ããã¯æå³çã«ãªããã€ã³ãã€éç Žå£çãªä»çµã¿ã§ããããã©ã«ãã§ã¯ãã¹ã±ãžã¥ãŒã©ãŒã¯é害ã®ã«ãŠã³ããšãã°èšé²ã®ã¿ãè¡ãïŒdecision.ts ã®ããªã·ãŒ C ãåç
§ïŒãPROXY_AUTO_DISABLE ãè¡ãåé€ããããšã¯ãããŸãããè¡ãåé€ããã®ã¯ãå¥ã®ãããç©æ¥µç㪠PROXY_AUTO_REMOVE ãã©ã°ã§ããäž¡æ¹ã true ã«èšå®ãããŠããå Žåã¯ãPROXY_AUTO_REMOVE ãåªå
ãããŸãïŒãŸããªãåé€ããããããã·ãããã®åã«ãœããç¡å¹åããŠãæå³ããªãããã§ãïŒã倿°ã®å®å
šãªäžèЧã«ã€ããŠã¯ãç°å¢èšå®ãªãã¡ã¬ã³ã¹ãåç
§ããŠãã ããã
ð é¢é£ããã¥ã¡ã³ãïŒ
- ãŠãŒã¶ãŒã¬ã€ã â äžè¬çãªã»ããã¢ãããšèšå®
- API ãªãã¡ã¬ã³ã¹ â API ã®å®å šãªããã¥ã¡ã³ã
- ç°å¢èšå® â ãã¹ãŠã®ç°å¢å€æ°