Обновлено:

Диагностика

Эта страница — рабочий playbook для ситуаций, когда сайт “вроде собрался”, но в браузере или через curl ведёт себя неправильно.

Лучший порядок: сначала понять, где ошибка — в сборке, web-root, Nginx или кэше браузера. Не начинайте сразу менять конфиги.

Быстрая карта симптомов

СимптомГде искать сначала
Главная отдаёт 403web-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'

Если здесь всё ожидаемо, базовый слой сайта жив.