Статический сайт на Nginx: правильные 404
Отдаём файлы и не маскируем отсутствующие страницы главной.
У статического блога каждая статья может быть отдельным каталогом с index.html. Для такого сайта не нужен сервер приложения: достаточно сопоставить URL с файлом. Важно при этом не превращать любой неизвестный адрес в успешный ответ с главной страницей.
Минимальная конфигурация
Этот server-блок предназначен для включения внутри http-контекста Nginx. Пример использует тестовое имя: замените его своим доменом.
server {
listen 80;
server_name blog.example.com;
root /var/www/notebook;
index index.html;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
location = /404.html {
internal;
}
}Положите index.html в корень, а статью — например, в posts/first/index.html. Для неизвестного пути Nginx вернёт 404 и покажет подготовленную страницу ошибки.
Почему не fallback на главную
Конструкция с последним аргументом /index.html полезна для некоторых SPA. Но в обычном блоге она скрывает опечатки в ссылках: пользователь получает главную, а мониторинг видит 200. Настоящая ошибка маршрута остаётся незаметной.
Проверка после изменения
sudo nginx -t
sudo systemctl reload nginx
curl -I http://blog.example.com/
curl -I http://blog.example.com/does-not-existПерезагрузку выполняйте только после успешной проверки конфигурации. Ожидаемые статусы — 200 и 404 соответственно. Если вместо страницы появляется 403, проверьте наличие index.html и права чтения файлов и прохода по родительским каталогам.
Проверяйте ещё и реальную статью: работающая главная не доказывает, что вложенные пути и ссылки на CSS настроены правильно. HTTPS подключается отдельно, когда домен уже указывает на сервер.