Прокси в Node.js и Axios: fetch через прокси
Node.js давно перестал быть только сервером для фронтенда: на нём строят краулеры, ETL-пайплайны и микросервисы мониторинга цен. Когда нужно распределить исходящие запросы по разным IP или проверить API из другого региона, без прокси не обойтись. Разберём три рабочих подхода — Axios, native fetch и агенты из экосистемы undici — на примере данных NEONPROXY в формате host:port:login:password.
Axios с HTTPS-прокси
Axios не принимает прокси «из коробки» — нужен агент. Пакет https-proxy-agent создаёт туннель CONNECT для HTTPS-трафика:
Если в ответе ваш домашний адрес — прокси не применился. Проверьте учётные данные и порт через прокси-чекер до отладки кода.
Native fetch в Node.js 18+
Начиная с Node 18, глобальный fetch доступен без polyfill. Прокси задаётся через опцию dispatcher из undici или через тот же HttpsProxyAgent:
Для long-polling и стриминга агент переиспользуйте на уровне модуля — создание нового ProxyAgent на каждый запрос увеличивает латентность.
SOCKS5 через socks-proxy-agent
Если в кабинете NEONPROXY выбран SOCKS5, установите socks-proxy-agent. URL формируется как socks5://login:password@host:port. Подробнее о различиях протоколов — в материале SOCKS5 vs HTTPS.
SOCKS5 удобен, когда приложение обращается к нестандартным портам или когда HTTP-прокси некорректно обрабатывает WebSocket.
Ротация пула и retry
Для мониторинга публичных данных распределяйте запросы по нескольким адресам. Простейший round-robin с обработкой 429:
Список адресов можно подгружать из API NEONPROXY — так пул пополняется без ручного копирования из кабинета.
Отладка и типичные ошибки
ECONNREFUSED — неверный порт или прокси недоступен. 407 Proxy Authentication Required — ошибка в логине или пароле. certificate has expired — проблема на стороне целевого сайта, не прокси. Включите NODE_DEBUG=http,https только на dev-машине: в production логи могут содержать credentials.
Перед масштабированием убедитесь, что целевой сервис разрешает автоматизированный доступ к публичным данным и что вы соблюдаете лимиты запросов. Прокси не отменяет правила площадки — он лишь меняет исходящий IP. Для SMM-задач с авторизованными сессиями закрепляйте один IP на аккаунт, как описано в гайде по ротации прокси.
IPv6 и геолокация
IPv6-адрес прокси в URL заключается в квадратные скобки: http://user:pass@[2a01:4f8:...]:8080. Проверьте, что целевой домен резолвится в AAAA, через инструмент проверки IPv6. Для задач, где важен регион исходящего трафика, выбирайте гео при заказе — это критично при тестировании CDN и региональных API.