Apache Linux (Apache HTTP Server 2.4)

Apache: только один сайт на общем сервере отвечает с задержкой

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

Один виртуальный хост Apache отвечает медленно, хотя на том же сервере соседние сайты быстро открываются. Нужно отделить задержку DNS/TLS от ожидания PHP, базы, файловой системы или особых правил конкретного VirtualHost. Простой рост Timeout редко устраняет причину.

В этой статье
  1. Симптом и границы применимости
  2. Возможные причины и как их отличить
  3. Пошаговая диагностика и исправление
  4. Как проверить результат
  5. Если проблема не устранена

#Симптом и границы применимости

Один виртуальный хост Apache отвечает медленно, хотя на том же сервере соседние сайты быстро открываются. Нужно отделить задержку DNS/TLS от ожидания PHP, базы, файловой системы или особых правил конкретного VirtualHost. Простой рост Timeout редко устраняет причину.

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Замедляется только динамика этого сайтаApache ждёт результата приложения, а не обязательно тратит процессор.CSS и изображения быстро отдаются, PHP-страница медленнаяПроверить обработчик PHP, запросы к базе и зависимые службы
Отличается корень или том сайтаОтдельный каталог может находиться на перегруженном или сетевом томе.Медленно загружается и статический тестовый файлСравнить DocumentRoot, диски и права
Особые правила VirtualHostВнешняя авторизация, RewriteRule и ProxyPass влияют только на выбранный сайт.Задержка есть на редиректах, проверках авторизации или проксиСравнить конфигурации проблемного и здорового сайтов

#Пошаговая диагностика и исправление

  1. Сравните время первого байтаОткройте терминал локального компьютера; выполните GET-запрос несколько раз сначала к проблемному домену, затем к контрольному. Подставьте существующий публичный URL, не содержащий токенов. Показатель time_starttransfer отражает получение первого байта; если медлен только полный ответ, изучайте размер и скорость передачи.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)Команда
    curl -sS -o /dev/null -w "HTTP=%{http_code} connect=%{time_connect} first=%{time_starttransfer} total=%{time_total}\n" https://example.com/
  1. Установите, какой VirtualHost обрабатывает запросЗайдите по SSH на сервер. В Debian используйте apache2ctl -S, в RHEL часто httpd -S; команда выводит сопоставление имени сайта и файла конфигурации. Найдите ServerName и DocumentRoot именно этого домена, отметьте ProxyPass и обработчик PHP; если Apache за Nginx, уточните, не задерживает ли ответ внешний Nginx.
    Linux · Терминал (Bash)КомандаНужен sudo
    Для Debian/Ubuntu; в других сборках используйте apachectl -S либо httpd -S.
    sudo apache2ctl -S
  1. Сопоставьте статику и динамикуОткройте в браузере существующее небольшое изображение с проблемного сайта и обычную страницу приложения, затем измерьте их curl. Не создавайте служебный тестовый PHP на общедоступном сервере без ограничения доступа. Если медлен PHP, посмотрите журналы выбранного пула FPM, запросы БД и блокировки; если медленно всё, проверьте путь файлов. Зафиксируйте время каждого наблюдения.
  1. Изучите журналы конкретного доменаНайдите ErrorLog и CustomLog именно в его VirtualHost. Выполните запрос и сразу сопоставьте записи по времени и IP; ошибки proxy_fcgi, timeout и AH... означают разные причины. Отсутствие записи — повод проверить внешний прокси и выбранный журнал, а не повышать лимит ожидания.
  2. В Debian с systemd; журнал службы не заменяет файлы ErrorLog/CustomLog
    Linux · Терминал (Bash)КомандаНужен sudo
    В Debian с systemd; журнал службы не заменяет файлы ErrorLog/CustomLog.
    sudo apache2ctl -t -D DUMP_VHOSTS; sudo journalctl -u apache2 -n 80 --no-pager
  1. Проверьте измеримые ограниченияНа сервере посмотрите загрузку, свободное место и доступность диска. Если mod_status уже включён и закрыт доступом администратора, сравните занятые рабочие потоки; не публикуйте /server-status без авторизации. При высокой задержке файлов не увеличивайте MaxRequestWorkers вслепую.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)Команда
    uptime; free -h; df -h; ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head
  1. Исправьте только подтверждённую причину и повторите замерСохраните копию изменяемой настройки. Если найдена неверная директива сайта, исправьте её через редактор панели/сервера; если зависает запрос базы — устраняйте в приложении; если том недоступен — восстановите доступ к нему. Перед перечитыванием Apache выполните проверку синтаксиса и проверьте соседний сайт после изменений.
  2. Только Debian/Ubuntu; для httpd измените имя службы
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Только Debian/Ubuntu; для httpd измените имя службы. Не применяйте reload при ошибке проверки.
    sudo apache2ctl configtest && sudo systemctl reload apache2

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

#Как проверить результат

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

#Если проблема не устранена

Если тормозит только запрос приложения, включите предусмотренную им диагностику медленных запросов и обратитесь к разработчику. Если медленно только снаружи — исследуйте DNS, TLS, CDN, IPv6 и балансировщик.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.