После занятия студент должен уметь:
- объяснить, зачем нужен Nginx;
- найти основные конфигурационные файлы;
- создать простой
server-блок; - настроить корневую папку сайта через
root; - использовать
locationдля разных путей; - проверить конфиг командой
nginx -t; - перезапустить или перечитать конфигурацию.
1. Что такое Nginx
Nginx — это веб-сервер. Он принимает HTTP-запросы от браузера и отдаёт ответ: HTML-страницу, картинку, CSS, JavaScript или перенаправляет запрос к другому приложению.
http://example.com. Браузер отправляет запрос на сервер. Nginx принимает запрос, ищет нужный файл и отдаёт его браузеру.
Где используется Nginx
- раздача статических сайтов;
- проксирование запросов к backend-приложениям;
- настройка HTTPS;
- балансировка нагрузки;
- ограничение доступа и базовая защита.
Простая схема работы
Браузер пользователя
↓ HTTP-запрос
Nginx
↓ ищет файл или передаёт запрос дальше
HTML / CSS / JS / backend-приложение
↓ HTTP-ответ
Браузер показывает страницу
2. Где находятся конфиги Nginx
На Linux-серверах основная конфигурация обычно находится в папке /etc/nginx/.
| Путь | Назначение |
|---|---|
/etc/nginx/nginx.conf |
Главный конфигурационный файл Nginx. |
/etc/nginx/sites-available/ |
Папка с доступными конфигурациями сайтов. |
/etc/nginx/sites-enabled/ |
Папка с включёнными сайтами. Обычно здесь лежат символические ссылки. |
/var/www/ |
Частое место для файлов сайтов. |
/var/log/nginx/ |
Папка с логами доступа и ошибок. |
sites-available и sites-enabled, а в некоторых системах конфиги сайтов кладут в conf.d.
3. Базовая структура конфигурации
Конфигурация Nginx состоит из директив. Директива — это команда внутри конфига. Простые директивы заканчиваются точкой с запятой. Блочные директивы содержат другие директивы внутри фигурных скобок.
директива значение;
блок {
директива значение;
}
Пример базового server block
server {
listen 80;
server_name example.com;
root /var/www/example;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
| Директива | Что делает |
|---|---|
server |
Описывает один сайт или виртуальный хост. |
listen 80; |
Говорит Nginx слушать порт 80, стандартный порт HTTP. |
server_name |
Указывает домен, для которого работает этот блок. |
root |
Указывает папку, где лежат файлы сайта. |
index |
Указывает файл, который открывается по умолчанию. |
location |
Настраивает поведение для конкретного пути URL. |
try_files |
Проверяет наличие файла или папки. Если ничего не найдено — возвращает ошибку. |
4. Создание первого сайта
Разберём минимальный пример: нужно создать HTML-страницу и настроить Nginx так, чтобы он её отдавал.
Шаг 1. Создать папку сайта
sudo mkdir -p /var/www/student-site
Шаг 2. Создать HTML-файл
sudo nano /var/www/student-site/index.html
Содержимое файла:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Мой первый сайт на Nginx</title>
</head>
<body>
<h1>Nginx работает!</h1>
<p>Это моя первая страница, которую отдаёт Nginx.</p>
</body>
</html>
Шаг 3. Создать конфиг сайта
sudo nano /etc/nginx/sites-available/student-site
Содержимое конфига:
server {
listen 80;
server_name _;
root /var/www/student-site;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server_name _; часто используют как условное значение, когда нет домена и сайт открывается по IP-адресу сервера.
Шаг 4. Включить сайт
sudo ln -s /etc/nginx/sites-available/student-site /etc/nginx/sites-enabled/
Шаг 5. Проверить конфигурацию
sudo nginx -t
Если всё хорошо, появится примерно такой результат:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Шаг 6. Перечитать конфиг
sudo systemctl reload nginx
5. Директива location
location позволяет настроить разные правила для разных URL-путей.
Пример: разные ответы для разных путей
server {
listen 80;
server_name _;
root /var/www/student-site;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location /images/ {
root /var/www/student-site;
}
location /status {
return 200 "Server is working\n";
}
}
| URL | Что произойдёт |
|---|---|
/ |
Откроется главная страница сайта. |
/images/logo.png |
Nginx попробует найти файл картинки. |
/status |
Nginx вернёт простой текст Server is working. |
root и alias. Для базового занятия достаточно использовать root. alias удобен, но требует аккуратности с путями.
6. Логи и диагностика
Когда сайт не открывается, нужно смотреть не только браузер, но и логи сервера.
| Команда | Назначение |
|---|---|
sudo nginx -t |
Проверить синтаксис конфигурации. |
sudo systemctl status nginx |
Проверить состояние службы Nginx. |
sudo systemctl reload nginx |
Перечитать конфигурацию без полного перезапуска. |
sudo systemctl restart nginx |
Полностью перезапустить Nginx. |
sudo tail -f /var/log/nginx/error.log |
Смотреть ошибки в реальном времени. |
sudo tail -f /var/log/nginx/access.log |
Смотреть входящие запросы. |
Типичные ошибки
- 403 Forbidden — нет прав на чтение файла или папки.
- 404 Not Found — файл не найден или неправильно указан путь.
- 502 Bad Gateway — Nginx не может подключиться к backend-приложению.
- bind() to 0.0.0.0:80 failed — порт уже занят другим процессом.
7. Мини-проверка
Вопросы
- Что делает Nginx?
- Для чего нужна директива
listen? - Что указывает директива
root? - Зачем нужен
server_name? - Что делает
location? - Как проверить конфигурацию Nginx?
- Чем отличается
reloadотrestart? - Где обычно лежат логи Nginx?
Ответы для самопроверки
- Принимает HTTP-запросы и отдаёт ответы.
- Указывает порт, который слушает сервер.
- Папку с файлами сайта.
- Домен или имя сайта для server block.
- Настраивает правила для конкретного URL-пути.
- Командой
sudo nginx -t. reloadперечитывает конфиг мягко,restartполностью перезапускает службу.- Обычно в
/var/log/nginx/.
8. Итоговый шаблон конфига
Этот шаблон можно использовать как основу для простого статического сайта:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example;
index index.html index.htm;
access_log /var/log/nginx/example_access.log;
error_log /var/log/nginx/example_error.log;
location / {
try_files $uri $uri/ =404;
}
}
sudo nginx -t, и только потом — sudo systemctl reload nginx.