Настройки nginx: где лежат и как их менять
Настройки nginx — текстовые файлы в папке /etc/nginx/. Общие лежат в nginx.conf, настройки каждого сайта — в своём файле в sites-available. После правки настройки проверяют командой sudo nginx -t и применяют командой sudo systemctl reload nginx.
Содержание 10
Что сделать прямо сейчас
- Команды вводятся на сервере: подключитесь к нему по SSH ([как подключиться](/instrukcii/kak-podklyuchitsya-k-vps-po-ssh/)) и набирайте их в том же окне.
- Откройте файл сайта:
sudo nano /etc/nginx/sites-available/example.com. Вместо example.com — имя файла вашего сайта: список покажетls /etc/nginx/sites-enabled/. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - Нажмите Ctrl+W, введите имя директивы, например
server_name, и нажмите Enter — курсор встанет на строку с этой директивой. - Поменяйте значение. Строка с директивой заканчивается точкой с запятой — не потеряйте её.
- Сохраните файл — Ctrl+O, Enter, затем Ctrl+X — и проверьте настройки:
sudo nginx -t. В ответе должны быть слова syntax is ok и test is successful. Тогда примените их:sudo systemctl reload nginx. Если команда ничего не ответила, настройки применены.
Если проверка нашла ошибку, nginx назовёт файл и номер строки, а сайт продолжит работать на старых настройках. Что значит сообщение — Все ошибки nginx.
Значения по умолчанию на этой странице — для nginx 1.24 из Ubuntu 24.04. Версию на сервере покажет nginx -v.
Как устроены файлы
| Файл или папка | Что в нём |
|---|---|
/etc/nginx/nginx.conf | общие настройки: сколько процессов запускать, журналы, сжатие; в конце подключает файлы из conf.d и sites-enabled |
/etc/nginx/sites-available/ | файлы сайтов, по одному на сайт; в каждом — блок server |
/etc/nginx/sites-enabled/ | ссылки на файлы из sites-available: nginx читает только эти сайты |
/etc/nginx/conf.d/ | дополнительные файлы с окончанием .conf; подключаются внутрь блока http |
/etc/nginx/snippets/ | готовые куски настроек для строки include, например fastcgi-php.conf для PHP |
/etc/nginx/proxy_params | заголовки для передачи запросов приложению: подключают строкой include proxy_params; |
/etc/nginx/mime.types | какой тип у файлов с каким окончанием: .css — text/css, .js — application/javascript |
Править файл сайта нужно в sites-available: в sites-enabled лежит только ссылка на него. Как создать файл сайта и включить его ссылкой — раздел «4. Опишите сайт в настройках nginx» инструкции по размещению сайта.
Блоки http, server и location
Настройки состоят из директив. Простая директива — имя, значения и точка с запятой в конце: worker_processes auto;. Блочная вместо точки с запятой содержит фигурные скобки, а в них — другие директивы. Всё, что стоит после знака # до конца строки, — комментарий: nginx его не читает.
Так устроен nginx.conf в Ubuntu 24.04, если оставить главные строки:
user www-data;
worker_processes auto;
events {
worker_connections 768;
}
http {
sendfile on;
access_log /var/log/nginx/access.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}Последняя строка подставляет файлы сайтов внутрь блока http. Поэтому в файле сайта блока http нет — он начинается сразу с server:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
# все адреса сайта
location / {
try_files $uri $uri/ =404;
}
# только адреса, которые начинаются с /images/
location /images/ {
expires 30d;
}
}Блок server описывает один сайт: на каком порту он принимает запросы — listen — и на какие имена отвечает — server_name. Блоки location внутри задают правила для части адресов сайта.
Где какую директиву можно писать
| Уровень | Где в файлах | Что там задают |
|---|---|---|
| main | nginx.conf вне всех блоков | пользователь, число процессов, главный журнал ошибок |
| events | блок events в nginx.conf | сколько соединений держит один процесс |
| http | блок http в nginx.conf и файлы из conf.d | настройки для всех сайтов: журналы, сжатие, типы файлов |
| server | файл сайта в sites-available | один сайт: порт, имена, папка, сертификат |
| location | внутри server | часть адресов сайта: файлы, приложение, кеш |
В справке nginx у каждой директивы есть строка «Контекст» — список блоков, где её можно писать. У gzip, например, это http, server, location и if в location. Если поставить директиву в другой блок, sudo nginx -t ответит directive is not allowed here — разбор ошибки.
Как наследуются настройки
Директива, заданная в http, действует во всех блоках server, а заданная в server — во всех его location. Если во внутреннем блоке написать ту же директиву, для этого блока действует она:
http {
gzip on; # сжатие для всех сайтов
server {
location /download/ {
gzip off; # здесь сжатия нет
}
}
}Ловушка — директивы, которые пишут по нескольку строк подряд: add_header и proxy_set_header. Внешние строки работают во внутреннем блоке, только если в нём нет ни одной своей такой строки. Добавили в location один свой add_header — заголовки из server для этого location пропали. Как с этим быть — add_header в nginx.
Главные директивы
| Директива | Что задаёт | Подробно |
|---|---|---|
server_name | на какие имена отвечает сайт | server_name |
location | правила для части адресов | location |
try_files | какой файл отдать и что делать, если его нет | try_files |
root, alias | в какой папке лежат файлы сайта | root и alias |
proxy_pass | передать запросы приложению на Node.js, Python и других языках | proxy_pass |
gzip | сжатие страниц и файлов | gzip |
expires | сколько браузер хранит файлы у себя | expires |
add_header | свои заголовки в ответе | add_header |
access_log, error_log | журналы запросов и ошибок | журналы |
worker_processes, worker_connections | сколько процессов и соединений | процессы и соединения |
client_max_body_size | самый большой запрос, например загружаемый файл | ошибка 413 |
limit_req | сколько запросов в секунду примет сайт | ошибка 429 |
auth_basic | пароль на раздел сайта | ошибка 401 |
fastcgi_pass | передать файлы .php в PHP-FPM | подключение PHP |
return 301 | переадресация на другой адрес | 301 в nginx |
Как посмотреть все настройки сразу
Настройки разбросаны по нескольким файлам. Эта команда проверяет их и печатает все подряд — каждый файл начинается строкой # configuration file и путём к нему:
sudo nginx -T | lessЛистать — стрелками и пробелом. Искать — клавиша /, затем слово и Enter. Выйти — клавиша Q.
Найти директиву сразу во всех сайтах:
grep -Rn 'server_name' /etc/nginx/sites-enabled/В ответе — файл, номер строки и сама строка. Ключ -R нужен потому, что в sites-enabled лежат ссылки: с ключом -r grep в них не заходит и ничего не находит. Подробнее — команда grep.
Ошибки и как их исправить
| Что видите | Что делать |
|---|---|
unknown directive | опечатка в имени или нет нужного модуля |
directive is not allowed here | директива не в том блоке |
directive "…" is not terminated by ";" | забыта точка с запятой |
unexpected end of file | не хватает закрывающей скобки |
duplicate location | два одинаковых блока location |
conflicting server name | одно имя в двух блоках server |
| изменения не видны на сайте | проверьте, что правили файл в sites-available, на который ведёт ссылка из sites-enabled, и что после правки была команда reload |
| другая ошибка | найдите её в списке |
Источники
- Документация nginx: руководство для начинающих — простые и блочные директивы, контексты main, events, http, server и location.
- Файл nginx.conf из пакета nginx в Ubuntu 24.04 —
worker_processes auto,worker_connections 768,gzip on, журналы в /var/log/nginx/, подключение conf.d и sites-enabled. - Файл sites-available/default из пакета nginx в Ubuntu 24.04 — сайт по умолчанию:
listen 80 default_server,server_name _, try_files. - Исходный код nginx 1.24.0: ngx_http_core_module.c — функция ngx_http_core_merge_loc_conf: если во внутреннем блоке значение не задано, берётся значение внешнего.
- Исходный код nginx 1.24.0: nginx.c — ключ -t проверяет настройки, -T вдобавок печатает их целиком.
- Документация nginx: gzip — строка «Контекст»: http, server, location, if в location.
- Документация nginx: add_header — строки наследуются, только если на текущем уровне нет своих add_header.
- man grep — ключ -r не заходит в ссылки внутри папки, ключ -R заходит во все.
Сверено 14 октября 2026 года.
Что почитать дальше
- Как разместить сайт на VPSфайл сайта, ссылка в sites-enabled, домен и HTTPS.
- Как установить nginx на Ubuntuустановка, порты 80 и 443, основные команды.
- server_name в nginxимена сайта и сервер по умолчанию.
- location в nginxкак nginx выбирает блок для адреса.
- Все ошибки nginxсообщения
nginx -tи журнала и что они значат.