Справочник

Настройки nginx: где лежат и как их менять

Настройки nginx — текстовые файлы в папке /etc/nginx/. Общие лежат в nginx.conf, настройки каждого сайта — в своём файле в sites-available. После правки настройки проверяют командой sudo nginx -t и применяют командой sudo systemctl reload nginx.

≈ 8 мин чтения
Содержание 10

Что сделать прямо сейчас

  1. Команды вводятся на сервере: подключитесь к нему по SSH ([как подключиться](/instrukcii/kak-podklyuchitsya-k-vps-po-ssh/)) и набирайте их в том же окне.
  2. Откройте файл сайта: sudo nano /etc/nginx/sites-available/example.com. Вместо example.com — имя файла вашего сайта: список покажет ls /etc/nginx/sites-enabled/. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter.
  3. Нажмите Ctrl+W, введите имя директивы, например server_name, и нажмите Enter — курсор встанет на строку с этой директивой.
  4. Поменяйте значение. Строка с директивой заканчивается точкой с запятой — не потеряйте её.
  5. Сохраните файл — 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 внутри задают правила для части адресов сайта.

Где какую директиву можно писать

УровеньГде в файлахЧто там задают
mainnginx.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
другая ошибканайдите её в списке

Источники

Сверено 14 октября 2026 года.

Что почитать дальше