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