Короткий ответ: nginx ставится одной командой apt install nginx и сразу запускается как служба. Дальше настройка сводится к трём шагам: создать файл сайта в /etc/nginx/sites-available/, включить его символической ссылкой в sites-enabled/, проверить конфигурацию командой nginx -t и перезагрузить службу. Правки в конфигурацию вносятся только после успешной проверки — иначе nginx не перечитает файлы и останется на старой версии.
Этот материал — часть цикла про первичную настройку Ubuntu 24.04 на VPS. Если сервер только что создан, начинать стоит оттуда.
Установка
apt update
apt install -y nginx
systemctl enable --now nginx
systemctl status nginx --no-pager
В Ubuntu 24.04 из штатного репозитория приходит стабильная ветка. Если нужна более свежая версия, подключают официальный репозиторий nginx, но для большинства задач штатной сборки достаточно — она получает обновления безопасности.
Проверить, что сервер отвечает:
curl -I http://127.0.0.1
Ответ 200 OK означает, что nginx работает и отдаёт страницу-заглушку. Дальше её нужно заменить своим сайтом.
Как устроена конфигурация
Понимание структуры каталогов экономит больше времени, чем любая шпаргалка по директивам.
| Путь | Назначение |
|---|---|
/etc/nginx/nginx.conf |
Главный файл: воркеры, логи, подключение каталогов конфигураций |
/etc/nginx/sites-available/ |
Файлы сайтов. Здесь лежат все конфигурации, включая выключенные |
/etc/nginx/sites-enabled/ |
Символические ссылки на включённые сайты |
/etc/nginx/conf.d/ |
Дополнительные глобальные блоки, подключаются целиком |
/etc/nginx/snippets/ |
Общие фрагменты, подключаемые директивой include |
/var/log/nginx/ |
access.log и error.log |
Разделение на sites-available и sites-enabled — это не формальность. Оно позволяет держать конфигурацию сайта на диске, но выключенной: достаточно удалить символическую ссылку, не трогая сам файл.
Создание сайта
Файл /etc/nginx/sites-available/example.com:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html index.php;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}
Включение сайта и отключение заглушки по умолчанию:
mkdir -p /var/www/example.com
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t
systemctl reload nginx
Команда nginx -t разбирает всю конфигурацию и сообщает файл и строку с ошибкой. reload перечитывает конфигурацию без разрыва активных соединений, в отличие от restart. Именно reload и следует использовать в работе.
Типичные ошибки
- Правка без проверки. Если
nginx -tне запускали, а конфигурация содержит ошибку,reloadзавершится неудачей, и nginx продолжит работать со старой конфигурацией. Внешне это выглядит как «изменения не применились». - Забыли символическую ссылку. Файл в
sites-availableбез ссылки вsites-enabledне читается вообще. Проверить:ls -l /etc/nginx/sites-enabled/. - Не указан
server_name. Тогда сайт становится сервером по умолчанию и перехватывает запросы по всем доменам, для которых нет своей конфигурации. - Права на каталог. Если nginx не может прочитать
root, ответ будет403 Forbidden. Владельцем обычно делают пользователяwww-data. - Порт занят. Ошибка
Address already in useозначает, что порт слушает другой процесс — часто это Apache. Проверить:ss -tlnp | grep :80.
Полезные команды
| Команда | Что делает |
|---|---|
nginx -t |
Проверяет конфигурацию, ничего не меняя |
nginx -T |
Выводит полную итоговую конфигурацию с учётом всех include |
systemctl reload nginx |
Перечитывает конфигурацию без разрыва соединений |
systemctl restart nginx |
Полный перезапуск, обрывает активные соединения |
tail -f /var/log/nginx/error.log |
Показывает ошибки в реальном времени |
Директива nginx -T особенно полезна, когда конфигурация разнесена по нескольким файлам и нужно понять, какая именно директива в итоге применилась.
Что делать дальше
- Закрыть лишние порты — это разобрано в материале про firewall на VPS.
- Выпустить сертификат — Let’s Encrypt через certbot.
- Если сайт на PHP, настроить связку с PHP-FPM — установка WordPress.
- Добавить кэширование статики и страниц, иначе каждый запрос будет уходить в приложение.
