Вы собрали workflow в n8n, он работал две недели, а потом начал стабильно падать с 403 Forbidden. Первая мысль — «сломался сайт» или «протухли креды». Чаще всего дело в другом: целевой сервер узнал, что запрос пришёл не от браузера, а от автоматизации, работающей с датацентрового IP вашего VPS. У n8n есть встроенный механизм проксирования — просто он не включён по умолчанию, а часть настроек живёт не там, где их ищут.
Разберём по шагам: где именно задаётся прокси в n8n, чем отличается self-hosted от Cloud, и какие три ловушки съедают больше всего времени.
Почему n8n блокируют чаще, чем ваш браузер
n8n — крупнейшая open-source платформа автоматизации: почти 198 тысяч звёзд и 59,6 тысяч форков на GitHub, актуальный релиз на момент публикации — [email protected] (24 июля 2026). Популярность имеет обратную сторону: анти-бот системы отлично знают её сетевой почерк.
Складываются три фактора:
- User-Agent выдаёт вас мгновенно. Это не догадка, а официально задокументированное поведение. В n8n есть переменная
N8N_ENFORCE_GLOBAL_USER_AGENT(по умолчаниюfalse), и документация прямо описывает её назначение: заменить «голую» строку User-Agentn8nна RFC-совместимуюMozilla/5.0 (compatible; n8n/<version>; +https://n8n.io/), чтобы предотвратить блокировку запросов файрволами веб-приложений. Проблема доходила до баг-репортов: в issue #28280 (открыт 10 апреля 2026, закрыт) описано, как нативные ноды отдавали bare-UAn8n, а сайты отвечали 403 с причиной «Bad User-Agent». Сама HTTP Request node под капотом использует axios и без ручного заголовка легко опознаётся. - IP вашего сервера — датацентровый. n8n почти всегда живёт на VPS или в облаке. Эти диапазоны публично известны и размечены как «не пользовательские»: часть площадок режет их жёстче, вплоть до кратно более низких лимитов запросов, чем для домашних подключений.
- Темп запросов нечеловеческий. Нода в цикле выпускает десятки запросов за секунды с одного адреса — это классический триггер rate-limit и последующего бана IP.
Шаг 1. Прокси в самой ноде (работает и на Cloud)
Самый быстрый путь — задать прокси точечно для одного HTTP Request:
- Откройте ноду HTTP Request.
- Внизу нажмите Add Option и выберите Proxy — это текстовое поле для URL прокси-сервера.
- Впишите строку в стандартном формате с авторизацией:
http://ЛОГИН:ПАРОЛЬ@host:port. - Там же добавьте опцию заголовков: включите Send Headers и задайте
User-Agentреального браузера — вручную скопируйте актуальную строку из DevTools своего Chrome.
Этот способ — единственный доступный на n8n Cloud: там вы не управляете средой выполнения, поэтому системные переменные окружения вам недоступны, а исходящий IP не закреплён и меняется от запуска к запуску. Плюс подхода — гранулярность: разные ноды одного workflow могут ходить через разные прокси и разные гео. Минус — если нод двадцать, придётся править двадцать мест.
Шаг 2. Глобальный прокси через переменные окружения (self-hosted)
На своём сервере логичнее завернуть весь исходящий трафик разом. n8n читает стандартные переменные:
HTTP_PROXY— URL прокси для незашифрованного HTTP-трафика нод;HTTPS_PROXY— то же для TLS/SSL-запросов (на практике это ваш основной параметр);ALL_PROXY— используется, когда не заданы более специфичныеHTTP_PROXY/HTTPS_PROXY;NO_PROXY— список хостов через запятую, к которым n8n пойдёт напрямую в обход прокси.
В docker-compose.yml это выглядит так:
HTTPS_PROXY=http://ЛОГИН:ПАРОЛЬ@gate.provider.com:8080NO_PROXY=localhost,127.0.0.1,postgres,n8n.example.comN8N_ENFORCE_GLOBAL_USER_AGENT=true
Обязательно заполните NO_PROXY. Иначе через внешний прокси уедут и внутренние обращения — к вашей Postgres, к соседним контейнерам, к собственному вебхук-домену. Симптом — «всё сломалось после включения прокси», хотя целевые сайты как раз стали открываться.
Если хотите не раскрывать версию n8n наружу, вместо RFC-строки задайте свою через N8N_GLOBAL_USER_AGENT_VALUE — она перекрывает значение по умолчанию. Общая логика настройки контейнерного трафика та же, что и в других сценариях: разбор форматов и подводных камней есть в гайде по проксированию Docker-контейнеров.
Шаг 3. Три ловушки, которые крадут вечер
Ловушка 1: регистр переменных решает
Это неочевидно и почти нигде не встречается в туториалах. n8n обрабатывает переменные, оканчивающиеся на _PROXY, через npm-пакет proxy-from-env, а тот навязывает свой порядок приоритета: строчные варианты (http_proxy) имеют приоритет над заглавными (HTTP_PROXY), если заданы обе. Классический сценарий боли: в системе давно лежит забытый https_proxy, вы аккуратно прописываете HTTPS_PROXY в compose — и трафик упрямо идёт по старому адресу. Проверяйте оба регистра.
Отдельная деталь для Enterprise: переменная прокси для запросов к лицензионному серверу https_proxy_license_server должна быть только строчными, формат — https://user:pass@proxy:port.
Ловушка 2: Code node не умеет то, что вы задумали
Частый совет из форумов — «напиши в Code node свой запрос через axios с прокси-агентом». По умолчанию это не сработает: n8n отключает импорт модулей в Code node. Разрешать их приходится явно — NODE_FUNCTION_ALLOW_BUILTIN для встроенных и NODE_FUNCTION_ALLOW_EXTERNAL для внешних (из n8n/node_modules). Дополнительный нюанс: если у вас task runners в external-режиме, эти переменные задаются не в окружении контейнера, а в конфиге раннеров /etc/n8n-task-runners.json как env-override. Проще и безопаснее остаться на штатной опции Proxy в ноде.
Ловушка 3: прокси есть, а темп прежний
Прокси меняет адрес, но не поведение. Если workflow по-прежнему выпускает залп запросов, вы просто сожжёте новые IP. В той же ноде есть встроенные тормоза:
- Batching — Items per Batch (сколько элементов в пачке) и Batch Interval в миллисекундах (
0= без паузы). Ставьте пачку 1–5 и интервал в 1000–3000 мс. - Timeout — в миллисекундах; резидентные каналы медленнее датацентровых, дефолт стоит поднять.
- Response → Never Error — не роняет весь workflow на первом 403, позволяет обработать код ответа ветвлением.
- Pagination — режимы Update a Parameter и Response Contains Next URL вместо самодельных циклов.
На уровне инстанса темп ограничивает N8N_CONCURRENCY_PRODUCTION_LIMIT (по умолчанию -1, то есть без лимита) — разумное значение убережёт и прокси-пул, и сам сервер. Подробнее о том, как площадки считают ваши запросы и что делать с лимитами, — в разборе обхода rate limiting через прокси.
Какие прокси брать под n8n
Выбор зависит не от «крутости», а от того, кто на другом конце.
- Датацентровые. Дёшево и быстро. Годятся для официальных API, внутренних сервисов, дружелюбных к ботам сайтов и любых задач, где нужен просто стабильный статический адрес — например, чтобы ваш IP занесли в белый список партнёра. На защищённых площадках дают ровно тот же 403, что и голый VPS: их диапазоны известны. Это база для пакетных задач без анти-бота.
- Резидентные. Адреса реальных домашних провайдеров — то, что нужно для сбора данных с площадок с серьёзной защитой, для гео-зависимого контента и мониторинга цен. Для workflow, которые ходят по публичным сайтам, резидентные прокси — рабочий дефолт: берите ротацию по запросу для массового парсинга и sticky-сессии, когда нужно удержать одну сессию на цепочке нод.
- Мобильные. Самый высокий уровень доверия: за одним оператором сидят тысячи живых абонентов, банить такой IP площадке дорого. Оправданы там, где режут жёстче всего — работа с соцсетями и мессенджерами. За это платите скоростью и ценой.
Практичная схема на смешанном workflow: официальные API — напрямую или через датацентровые, публичные сайты — через резидентные, соцсети — через мобильные. Опция Proxy настраивается на каждой ноде отдельно, так что комбинировать всё это в одном сценарии можно без костылей.
Чек-лист перед запуском
- Прокси задан — либо опцией Proxy в ноде, либо через
HTTPS_PROXY; на Cloud доступен только первый вариант. - Проверены оба регистра переменных — строчные перебивают заглавные.
NO_PROXYзакрывает localhost, базу и внутренние хосты.- User-Agent заменён:
N8N_ENFORCE_GLOBAL_USER_AGENT=trueили собственный заголовок в ноде. Заодно проверьте согласованность остальных заголовков — несогласованный набор headers выдаёт автоматизацию не хуже самого User-Agent. - Включён Batching с ненулевым интервалом.
- Тестовый прогон сделан на 3–5 элементах, а не на всём списке.
Вывод
403 в n8n — почти всегда не одна причина, а сумма трёх: узнаваемый User-Agent, датацентровый IP и слишком ровный темп запросов. Лечится это тоже комплектом, а не одной галочкой: подменить UA, увести трафик через прокси нужного типа и притормозить ноду через Batching. Все три рычага уже встроены в платформу — их достаточно найти и включить.
Начать проще всего с резидентного канала на самых проблемных нодах и датацентрового на остальных: оплата у ProxyCove идёт за трафик, поэтому под тесты можно взять минимальный объём и посмотреть, как поведёт себя ваш конкретный workflow. Подобрать прокси под задачу и подставить строку в поле Proxy — дело пары минут.
