Бесплатный разбор
Сайты и SEO

Таймаут: почему браузер не дождался ответа и где искать зависание

Чем таймаут браузера отличается от 504, как измерить время соединения и ответа через curl, какие лимиты стоят в nginx, PHP и базе и почему увеличение таймаута не лечит зависший запрос. С промптами для нейросети.

Коротко. «Время ожидания истекло» означает, что клиент не получил ответ за отведённое время. Причина может быть в соединении, DNS, шлюзе или приложении. Код 504 — только один из вариантов: его ставит шлюз, когда бэкенд не ответил. Смотреть нужно на цепочку и на то, где именно остановился запрос.

Как читать материал. Сначала измерьте время по этапам, потом посмотрите лимиты на каждом участке. Нейросеть помогает разобрать цифры и конфиг, но причину зависания ищите в логах и профилировщике.

Где может ждать запрос

  • DNS. Имя долго не разрешается.
  • Соединение. Клиент не может установить TCP-соединение.
  • TLS. Долгий TLS handshake.
  • CDN или прокси. Ждёт origin.
  • nginx. Ждёт PHP-FPM или upstream.
  • PHP. Скрипт работает дольше лимита.
  • База. Запрос заблокирован или ждёт соединения.

Разные участки дают разные ошибки: браузерное ERR_CONNECTION_TIMED_OUT, ERR_EMPTY_RESPONSE или серверный 504.

Схема цепочки таймаутов: браузер, CDN, nginx, PHP, база
У каждого участка свой лимит. Ошибка появляется там, где лимит сработал первым.

Как измерить

curl умеет показывать время по этапам:

curl -o /dev/null -s -w "dns:%{time_namelookup} connect:%{time_connect} tls:%{time_appconnect} first:%{time_starttransfer} total:%{time_total}\n" https://site.ru/

Читайте так:

  • time_namelookup — DNS;
  • time_connect — TCP;
  • time_appconnect — TLS;
  • time_starttransfer — первый байт ответа;
  • time_total — весь запрос.

Если DNS занимает секунды, проблема в резолвере. Если соединение быстрое, а первый байт приходит поздно — зависло приложение или база.

Классический путь. Снимите тайминги для нескольких URL и сравните этапы.

С нейросетью. Отдайте таблицу замеров и попросите найти узкое место.

Вот время dns, connect, tls, first byte и total для 10 URL. Найди, на каком
этапе теряется время, и раздели страницы на группы. Не предлагай поднимать
таймаут, пока не назовёшь этап. Ответь таблицей.

Проверка. Повторите замер 2–3 раза: разовый выброс ничего не доказывает.

Лимиты, которые срабатывают первыми

Участок Параметр Что означает
nginx → PHP fastcgi_read_timeout сколько ждать ответа FPM
nginx → upstream proxy_read_timeout сколько ждать ответа прокси
PHP max_execution_time сколько может работать скрипт
База innodb_lock_wait_timeout сколько запрос ждёт освобождения блокировки
CDN 125 секунд у Cloudflare по умолчанию лимит ожидания origin

Последний пункт объясняет ошибку 524: соединение есть, но ответ не пришёл за 125 секунд.

Как исправить

Причина Действие
Долгий SQL-запрос добавить индекс, переписать запрос
Тяжёлая выгрузка вынести в фон и отдавать файл позже
Внешний API поставить свой таймаут и повтор с паузой
Много одновременных запросов ограничить очередь и увеличить пул
Медленный DNS сменить резолвер или проверить зону
Сетевой обрыв проверить маршрут и firewall

Увеличение таймаута помогает, только если запрос завершается, но медленно. Если он завис, вы просто дольше ждёте ошибку.

Влияет ли это на SEO

Долгие ответы ухудшают обход: робот тратит время на ожидание и реже возвращается. Если сервер отдаёт 504 или обрывает соединение, страницы реже обходятся.

Скорость ответа влияет и на людей: посетитель уходит, не дождавшись. Поэтому таймаут — это не только техническая, но и конверсионная проблема.

Где помогает нейросеть

Задача Что делает модель Что проверять руками
Разбор таймингов находит узкий этап повторные замеры
Анализ SQL предлагает индексы план запроса
Конфиг nginx подбирает таймауты синтаксис и нагрузка
Письмо хостеру описывает факты логи и время

Частые ошибки

  • Поднимать таймаут без поиска причины.
  • Смотреть только общий time_total.
  • Игнорировать DNS и TLS.
  • Путать 504 с 502.
  • Ставить бесконечный таймаут в PHP.
  • Не проверять повторяемость замера.

Вопросы

Таймаут — это ошибка сервера?

Не всегда. Он может возникнуть при DNS-запросе, в сети, на CDN, в приложении или базе. Код 504 ставит шлюз, браузерное сообщение — клиент.

Чем 504 отличается от таймаута браузера?

504 — HTTP-ответ от шлюза. Браузерное сообщение означает, что ответа не дождался сам клиент. Причины могут пересекаться.

Поможет ли увеличить таймаут?

Если запрос завершается, но медленно — да. Если завис — нет.

Может ли нейросеть найти зависший запрос?

Она анализирует логи и код, но точку зависания подтверждают профилировщик и план запроса.

Связанные материалы

Источники

Официальные документы 5

Разбор проекта

Разберём сайт и спрос

Посмотрим сайт и спрос, скажем, что исправить первым. 20–30 минут в Zoom, Telegram или по телефону. Бесплатно и без обязательств.

Разобрать проектВсе материалы →