Обновлено:

HTTP status codes

HTTP-статус — это первый сигнал, с которого стоит начинать диагностику.
Он не всегда объясняет причину полностью, но быстро показывает направление: всё хорошо, есть редирект, не найден файл, нет доступа или сломан серверный слой.

Быстрая проверка

curl -kI https://getsrv.app/
curl -kI https://getsrv.app/no-such-page

Для короткого smoke-test:

curl -kS -o /dev/null -w '%{http_code}\n' https://getsrv.app/

Короткая карта статусов

КодСмыслГде смотреть
200Успешный ответЗаголовки, кэш, body
204Успех без bodyHealth-check endpoints
301Постоянный редиректLocation, canonical URL
302Временный редиректLocation, login/redirect logic
304Не изменилосьCache validators, ETag, Last-Modified
400Некорректный запросURL, Host, заголовки
401Нужна авторизацияAuth layer
403Доступ запрещёнПрава, index, Nginx location
404Не найденоФайл, route, try_files
405Метод запрещёнGET/POST/HEAD handling
408Timeout запросаClient/proxy/network
429Rate limitЛимиты, антифлуд, WAF
500Ошибка сервераBackend/app logs
502Bad gatewayUpstream недоступен
503Service unavailableService down/maintenance
504Gateway timeoutUpstream timeout

200 OK

Страница найдена и успешно отдана.

Проверка:

curl -kI https://getsrv.app/

Но 200 сам по себе не значит, что всё идеально. После него проверьте:

  • content-type;
  • cache-control;
  • security headers;
  • правильный body;
  • отсутствие внешних runtime-запросов.

301 и 302

Редиректы проверяются через -L и без него.

Без перехода:

curl -kI https://getsrv.app/some-path

С переходом:

curl -kIL https://getsrv.app/some-path

Смотрите заголовок:

location: ...

Если редирект неожиданный, проверьте Nginx return, rewrite, canonical правила и trailing slash.

304 Not Modified

304 связан с кэшем. Сервер говорит: “у клиента уже актуальная версия”.

Проверить validators:

curl -kI https://getsrv.app/

Смотрите:

etag
last-modified
cache-control

Для статического сайта это нормальный статус, если кэш настроен корректно.

403 Forbidden

Частые причины:

  • нет index.html;
  • директория есть, но index отсутствует;
  • неверные права;
  • Nginx запрещает доступ;
  • request попал не в тот location.

Проверка:

sudo test -f /var/www/getsrv.app/index.html && echo "index OK" || echo "index missing"
namei -l /var/www/getsrv.app/index.html
curl -kI https://getsrv.app/

Быстрое исправление прав:

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

404 Not Found

Для статической сборки путь /ru/docs/cache-control/ обычно соответствует файлу:

/var/www/getsrv.app/ru/docs/cache-control/index.html

Проверка:

sudo test -f /var/www/getsrv.app/ru/docs/cache-control/index.html && echo OK || echo missing

Если файла нет в /var/www, но есть в dist, повторите deploy.
Если файла нет в dist, проверьте имя страницы и Astro route.

500, 502, 503, 504

На чистом статическом сайте эти коды обычно означают проблему не в HTML-файле, а в серверном слое выше:

  • Nginx;
  • reverse proxy;
  • upstream;
  • firewall;
  • service routing.

Быстрые проверки:

sudo nginx -t
sudo systemctl status nginx --no-pager
sudo ss -lntp | grep -E ':(80|443|7443)\b'

Минимальный smoke-test статического сайта

curl -kS -o /dev/null -w '/              %{http_code}\n' https://getsrv.app/
curl -kS -o /dev/null -w '/ru/docs/      %{http_code}\n' https://getsrv.app/ru/docs/
curl -kS -o /dev/null -w '/ru/tools/     %{http_code}\n' https://getsrv.app/ru/tools/
curl -kS -o /dev/null -w '/sitemap       %{http_code}\n' https://getsrv.app/sitemap-index.xml
curl -kS -o /dev/null -w '/missing       %{http_code}\n' https://getsrv.app/no-such-page

Ожидаемо:

/              200
/ru/docs/      200
/ru/tools/     200
/sitemap       200
/missing       404