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 | Успех без body | Health-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 |
408 | Timeout запроса | Client/proxy/network |
429 | Rate limit | Лимиты, антифлуд, WAF |
500 | Ошибка сервера | Backend/app logs |
502 | Bad gateway | Upstream недоступен |
503 | Service unavailable | Service down/maintenance |
504 | Gateway timeout | Upstream 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