Skip to content

Proxy Pool

Orinuno can route every outbound call that talks to Kodik through a rotating proxy pool. The pool is stored in the kodik_proxy table and driven by ProxyProviderService + ProxyWebClientService.

orinuno:
proxy:
enabled: true
rotation-strategy: round-robin

Proxies must exist as rows in kodik_proxy. A minimal manual seed:

INSERT INTO kodik_proxy (host, port, username, password, proxy_type, status)
VALUES ('10.0.0.1', 8080, NULL, NULL, 'HTTP', 'ACTIVE');
  • ProxyProviderService picks the next ACTIVE proxy in round-robin order.
  • The proxy is applied to WebClient via an HttpClient with Netty’s HttpClient.create().proxy(...).
  • On failure, ProxyWebClientService.executeWithProxyFallback(...) retries the same request without a proxy and increments fail_count.
  • If fail_count crosses an internal threshold, the proxy is marked FAILED and skipped from rotation until an operator flips it back to ACTIVE.
CallerPurpose
KodikVideoDecoderServiceIframe fetch, player JS fetch, video-info POST
HlsManifestServicem3u8 fetch
PlaywrightVideoFetcherLaunches Chromium with proxy settings when enabled

Kodik API (kodik-api.com) calls do not go through the proxy pool — they use a dedicated WebClient with the user’s token, which Kodik expects from a stable IP.

  • The pool is eventually consistent. A FAILED proxy stays failed until you manually reset it; a future automated recovery check is tracked in the backlog.
  • Proxy credentials are stored in plaintext in MySQL. Use network-level protection (private VPC, encrypted at rest) rather than relying on the application layer.