Диагностика
Эта страница — рабочий playbook для ситуаций, когда сайт “вроде собрался”, но в браузере или через curl ведёт себя неправильно.
Лучший порядок: сначала понять, где ошибка — в сборке, web-root, Nginx или кэше браузера. Не начинайте сразу менять конфиги.
Быстрая карта симптомов
| Симптом | Где искать сначала |
|---|---|
Главная отдаёт 403 | web-root пустой, нет index.html, права на файлы |
Существующая страница отдаёт 404 | нет path/index.html в dist или /var/www |
| После деплоя видна старая страница | браузерный кэш, service worker, не тот web-root |
| Нет CSS/JS | не задеплоились /assets/, неверные права, неверный путь ассетов |
| Нет security headers | активный Nginx location не добавляет add_header |
Asset без immutable | файл обслуживается не из /assets/ |
| HTML с долгим cache | перепутана cache policy для HTML и assets |
1. Проверить, что Nginx жив и конфиг валиден
sudo nginx -t
sudo systemctl status nginx --no-pager
Нормально:
syntax is ok
test is successful
active (running)
Если nginx -t показывает ошибку, сначала исправьте её. Reload/restart не делать, пока тест не успешен.
2. Проверить listener’ы
sudo ss -lntp | grep -E ':(80|443|7443|10443|11443)\b'
Для обычного контентного обновления listener’ы не должны измениться.
Если пропал локальный Nginx listener или публичный edge listener, проблема уже не в контенте сайта.
3. Проверить сборку
cd ~/getsrv-static-src
npm run build
find dist -type f -name '*.html' | wc -l
find dist -maxdepth 3 -type f | sort | sed -n '1,160p'
Что смотреть:
- есть
dist/index.html; - есть
dist/ru/index.html; - есть
dist/ru/docs/index.html; - есть
dist/ru/tools/index.html; - есть
dist/assets/.
Если dist/ пустой или страниц резко меньше обычного — не деплоить.
4. Проверить production web-root
sudo find /var/www/getsrv.app -maxdepth 3 -type f | sort | sed -n '1,160p'
sudo ls -la /var/www/getsrv.app | sed -n '1,80p'
Для главной страницы нужен файл:
/var/www/getsrv.app/index.html
Для /ru/docs/cache-control/ нужен файл:
/var/www/getsrv.app/ru/docs/cache-control/index.html
5. Если главная отдаёт 403
Проверьте наличие index:
test -f /var/www/getsrv.app/index.html && echo "index OK" || echo "index missing"
Проверьте права:
namei -l /var/www/getsrv.app/index.html
Быстрое исправление прав:
sudo find /var/www/getsrv.app -type d -exec chmod 755 {} \;
sudo find /var/www/getsrv.app -type f -exec chmod 644 {} \;
sudo chown -R www-data:www-data /var/www/getsrv.app
После этого:
curl -kI https://getsrv.app/
6. Если страница отдаёт 404
Пример: /ru/docs/cache-control/.
Проверьте файл в production:
test -f /var/www/getsrv.app/ru/docs/cache-control/index.html && echo "page OK" || echo "page missing"
Проверьте файл в сборке:
test -f ~/getsrv-static-src/dist/ru/docs/cache-control/index.html && echo "dist page OK" || echo "dist page missing"
Если в dist файл есть, а в /var/www нет — повторите deploy:
sudo rsync -a --delete ~/getsrv-static-src/dist/ /var/www/getsrv.app/
Если файла нет в dist, проблема в Astro route или имени файла.
7. Если CSS/JS не загрузились
Проверить ассеты:
find /var/www/getsrv.app/assets -maxdepth 1 -type f | sort
Проверить первый asset:
ASSET="$(find /var/www/getsrv.app/assets -maxdepth 1 -type f | head -n 1 | sed 's#^/var/www/getsrv.app##')"
curl -kI "https://getsrv.app$ASSET"
Ожидаемо:
HTTP/2 200
Cache-Control: public, max-age=31536000, immutable
Если asset отдаёт 404, проверьте, совпадает ли build.assets в Astro с Nginx location /assets/.
8. Если нет security headers
Проверка:
curl -kI https://getsrv.app/ | grep -Ei 'content-security-policy|x-frame-options|x-content-type-options|referrer-policy|permissions-policy'
Ожидаемо должны быть все основные headers.
Если их нет, проверьте активный location в Nginx. В Nginx add_header может не наследоваться, если внутри location есть свои add_header.
9. Если видна старая версия страницы
Сначала проверьте сервер, а не браузер:
curl -ks https://getsrv.app/ | grep -oE 'Технический справочник|эксплуатации веб-сервисов' | sort -u
Если через curl новая версия есть, а в браузере старая:
- сделайте
Ctrl+F5; - проверьте DevTools → Network → Disable cache;
- откройте страницу в приватном окне.
Если через curl тоже старая версия, значит не был выполнен deploy или смотрите не тот web-root.
10. Если после деплоя всё стало хуже
Не пытайтесь чинить сразу несколько слоёв. Сначала откатите web-root из backup:
sudo rsync -a --delete "$BACKUP_DIR/getsrv.app-www/" /var/www/getsrv.app/
sudo chown -R www-data:www-data /var/www/getsrv.app
sudo nginx -t
sudo systemctl reload nginx
Потом разберите ошибку на копии проекта.
Минимальная команда проверки
curl -kI https://getsrv.app/
curl -kI https://getsrv.app/ru/docs/
curl -kI https://getsrv.app/ru/tools/
curl -kI https://getsrv.app/no-such-page
sudo ss -lntp | grep -E ':(443|7443|10443|11443)\b'
Если здесь всё ожидаемо, базовый слой сайта жив.