Execution timed out в n8n: таймауты workflow, HTTP Request, AI и reverse proxy
Обновлено: 2026-05-29
Execution timed out в n8n означает только одно: какая-то часть процесса ждала слишком долго. Но место ожидания может быть разным: весь workflow, HTTP Request, AI-нода, Webhook response, reverse proxy, внешний API, очередь workers или ручное подтверждение. Поэтому неверно сразу увеличивать общий timeout — сначала нужно понять, какой именно слой оборвал выполнение.
Правильная стратегия: разделить долгую работу и быстрый ответ. Если workflow вызывается webhook-ом от платежей, CRM или формы, внешний сервис часто ждёт ответ ограниченное время. n8n может продолжать работу дольше, но клиенту нужно вернуть HTTP 200 быстро и обрабатывать основную часть асинхронно.
Где может возникать таймаут
| Слой | Пример | Как выглядит |
|---|---|---|
| workflow execution | общий лимит выполнения | execution прерывается после заданного времени |
| HTTP Request | медленный API CRM или маркетплейса | нода падает с timeout или network error |
| AI/LLM | локальная модель, длинный prompt, RAG | долгое ожидание ответа модели |
| reverse proxy | Nginx/Cloudflare не дождался backend | 504 Gateway Timeout |
| webhook sender | ЮKassa, Tilda, Telegram, CRM | сервис повторяет событие или считает webhook неуспешным |
| queue mode | execution долго ждёт свободного worker | задача висит в очереди, workers заняты |
Env для общего лимита workflow
Общий timeout задаёт верхнюю границу выполнения workflow. Он полезен как предохранитель, но не должен быть способом чинить медленную архитектуру.
services:
n8n:
environment:
- EXECUTIONS_TIMEOUT=900
- EXECUTIONS_TIMEOUT_MAX=3600
EXECUTIONS_TIMEOUT=900 — 15 минут по умолчанию для workflow. EXECUTIONS_TIMEOUT_MAX ограничивает максимум, который можно поставить для отдельного workflow. Если выставить бесконечные лимиты, зависшие executions будут копиться и давить на базу, workers и внешние API.
HTTP Request: таймаут ноды и повторные попытки
Если падает именно HTTP Request, смотрите не только общий timeout. Проверьте:
- сколько отвечает внешний API без n8n через
curl; - есть ли pagination вместо одного огромного запроса;
- не отдаёт ли API 429 или 5xx перед timeout;
- включён ли retry и не усиливает ли он нагрузку;
- не нужен ли Wait между запросами.
time curl -sS -o /tmp/response.json \
-H "Authorization: Bearer $TOKEN" \
"https://api.example.ru/orders?limit=100"
Если прямой запрос занимает 40 секунд, не пытайтесь уложить его в webhook-response. Такой шаг лучше делать после быстрой записи события в очередь или таблицу.
Webhook: быстрый ответ, длинная обработка
Для webhooks от платёжных систем, форм и CRM безопаснее вернуть ответ быстро, а тяжёлую часть выполнять после этого. Минимальный паттерн:
Webhook → validate signature → записать event_id → Respond to Webhook 200 → обработка CRM/AI/файлов
Если внешний сервис ждёт 3–10 секунд, а ваш workflow делает RAG, PDF, CRM, Telegram и Google Sheets, отправитель почти гарантированно решит, что webhook не сработал. Потом он повторит событие, и вы получите дубли. Поэтому таймауты webhooks всегда связаны с idempotency.
Nginx, Traefik, Cloudflare и 504
Если в n8n execution продолжается, но клиент получает 504, проблема может быть в reverse proxy. Для Nginx проверьте proxy timeout:
location / {
proxy_pass http://n8n:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_connect_timeout 60s;
}
Увеличение proxy timeout нужно только для сценариев, где клиент действительно должен ждать результат. Для webhook-событий лучше быстрый ответ и асинхронная обработка.
AI и локальные модели
AI-ноды могут работать дольше обычных HTTP-запросов, особенно с локальными моделями, большим контекстом и RAG. Для них важно уменьшать вход, а не только ждать дольше:
- ограничить количество retrieved chunks;
- не передавать весь документ в prompt;
- делать summarization до Agent;
- ставить fallback на более быструю модель;
- логировать model, prompt size и время ответа.
Если локальная модель на Ollama отвечает 90 секунд, а webhook ждёт 10 секунд, архитектура должна быть асинхронной.
Queue mode: когда execution ждёт worker
В queue mode таймаут может казаться ошибкой workflow, хотя проблема в очереди: workers заняты, concurrency слишком низкая, Redis недоступен или PostgreSQL медленный. Проверяйте:
docker compose ps
docker compose logs --tail=100 n8n-worker
docker compose logs --tail=100 redis
Если tasks долго ждут свободного worker, увеличьте workers или concurrency, но только после проверки базы и внешних API. Больше параллельности может ускорить очередь, а может превратить 429 и timeout в постоянное состояние.
Практический алгоритм
- Определите, кто сообщил timeout: n8n, HTTP node, proxy или внешний сервис.
- Запустите проблемный шаг отдельно на том же payload.
- Измерьте время внешнего API через
curl. - Проверьте proxy logs и container logs за ту же минуту.
- Если это webhook, добавьте быстрый Respond to Webhook.
- Если это массив, разбейте обработку на пачки.
- Если это AI, уменьшите контекст и добавьте fallback.
- После изменения повторите тест на маленьком и крупном payload.
Ручная диагностика перед исправлением ¶
Перед тем как менять настройки по теме «Execution timed out в n8n», зафиксируйте не только текст ошибки, но и последний успешный запуск. Для n8n это критично: один и тот же симптом может появиться из-за credentials, изменения payload, лимита API, обновления версии или инфраструктурного сбоя.
Рабочий порядок: изолируйте один execution, сохраните входной item без секретов, проверьте branch с ошибкой и только потом меняйте workflow. Главный риск — исправить симптом на одной ноде, но оставить первопричину в credentials, payload, лимитах API или окружении.
| Слой | Что зафиксировать | Зачем |
|---|---|---|
| Вход | нормализованный prompt, контекст, список источников, версия промпта и ожидаемый JSON-ответ | позволяет повторить проблему без доступа к production-секретам |
| Контроль | validation_error_rate, token_cost, fallback_usage, human_review_rate, source_coverage | показывает деградацию раньше, чем пользователи начинают писать в поддержку |
| Безопасность | исправить симптом на одной ноде, но оставить первопричину в credentials, payload, лимитах API или окружении | снижает риск скрытых дублей, утечки данных и неконтролируемых write-действий |
| Готовность | есть тест на happy path, пустой вход, повтор и сбой внешнего сервиса для «Execution timed out в n8n» | делает статью пригодной для runbook, а не только для чтения |
Пример безопасного входного контракта ¶
{
"request_id": "req_demo_001",
"prompt_version": "2026-05-29",
"input": "краткое нормализованное сообщение пользователя",
"allowed_actions": ["read", "draft", "classify"],
"forbidden_actions": ["send_without_review", "change_payment"],
"expected_output": {
"intent": "technical|support|sales|unknown",
"confidence": 0.0,
"needs_human_review": true,
"sources": []
}
}
Критерий готовности ¶
- точный текст ошибки сохранён без токенов и персональных данных
- понятно, какая нода упала первой, а какие ошибки были следствием
- есть минимальный воспроизводимый workflow или тестовый execution
- после исправления проверены retry, error branch и последний успешный сценарий
Связанные материалы
Ответы на частые вопросы
Что делать при Execution timed out в n8n?
Сначала определить слой: общий workflow, HTTP Request, AI-нода, proxy, webhook sender или очередь. После этого менять только нужный лимит или архитектуру.
Можно ли просто увеличить EXECUTIONS_TIMEOUT?
Можно, если workflow действительно должен работать дольше. Но для webhooks и внешних событий лучше вернуть быстрый ответ и продолжить обработку асинхронно.
Почему webhook получает 504, а execution в n8n продолжается?
Чаще всего timeout сработал в reverse proxy или у отправителя webhook. n8n может продолжать работу, но клиент уже не дождался ответа.
Production-чеклист для таймаутов execution
Используйте этот блок как быстрый контроль перед публикацией workflow или изменением существующей автоматизации. Он не заменяет staging, но помогает поймать самые частые отказы заранее.
- Перед запуском: найти самую долгую ноду, проверить timeout, retries, external API и размер payload.
- Минимальный тест: повторить execution на малом payload и на production-подобном payload.
- Типовой отказ: одна медленная внешняя API-точка блокирует весь workflow.
- Что логировать: входной payload без секретов, статус внешнего API, branch ошибки, execution id и владельца процесса.
Критерий готовности: сценарий проходит успешный путь, ошибочный путь и повтор события без дублей, потери данных и неконтролируемого падения execution.