Ошибки

Ошибка nginx unknown directive: nginx не знает такого слова

В строке из сообщения стоит слово, которого nginx не знает. Откройте файл на этой строке, сравните слово в кавычках с правильным названием и исправьте.

Обновлено 10.10.2026≈ 7 мин чтения
Содержание 9

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

  1. Откройте файл на строке из сообщения — шаг 1.
  2. Посмотрите на слово в кавычках и найдите свой случай — шаг 2.
  3. Исправьте строку, проверьте и примените настройки — шаг 3.

Все команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.

Что значит это сообщение

2026/10/09 12:00:00 [emerg] 2345#2345: unknown directive "servr_name" in /etc/nginx/sites-enabled/example.com:4
nginx: configuration file /etc/nginx/nginx.conf test failed

unknown directive — «неизвестная директива». Директива — первое слово в строке настроек: listen, server_name, root. nginx сверяет его со списком слов, которые знает он сам и его подключённые модули. Слова servr_name в этом списке нет — это опечатка в server_name.

В конце сообщения — файл и номер строки: здесь файл /etc/nginx/sites-enabled/example.com, строка 4. Дата, время и номер процесса у вас будут свои. В других сборках nginx та же строка начинается со слов nginx: [emerg].

Если nginx знает директиву, но она стоит не на своём месте, сообщение будет другим — directive is not allowed here.

Шаг 1. Откройте файл на строке из сообщения

Если в сообщении путь начинается с /etc/nginx/sites-enabled/, откройте файл с тем же именем в папке /etc/nginx/sites-available/ — там лежит оригинал, а в sites-enabled только ссылка на него. Как это проверить, написано в разделе «Какой файл открывать». Откройте файл из сообщения сразу на нужной строке: число после знака + — номер строки из сообщения, путь — тот, что стоит перед двоеточием.

sudo nano -l +4 /etc/nginx/sites-available/example.com

Шаг 2. Найдите свой случай

Слово в кавычкахЧто случилось
servr_name, server-name, ListenОпечатка
http2http2 в Ubuntu 24.04
more_set_headers, brotli, brotli_staticДиректива из модуля, которого нет
RewriteEngine, RewriteRule, DocumentRoot, <VirtualHostСтроки из настроек Apache
Слово выглядит правильно, или в кавычках два слова через пробелНевидимые символы

Опечатка

nginx различает большие и маленькие буквы и не путает подчёркивание с дефисом: Listen и server-name для него — неизвестные слова. Правильно — listen и server_name. Названия директив пишутся маленькими латинскими буквами, слова внутри названия разделяет подчёркивание.

Если не уверены в написании, найдите директиву в алфавитном указателе документации nginx.

http2 в Ubuntu 24.04

2026/10/09 12:00:00 [emerg] 2345#2345: unknown directive "http2" in /etc/nginx/sites-enabled/example.com:3

Строка http2 on; появилась в nginx 1.25.1, а в Ubuntu 24.04 стоит nginx 1.24.0. В этой версии HTTP/2 включают словом http2 в строке listen. Удалите строку http2 on; и допишите http2 в строки listen для порта 443:

listen 443 ssl http2;
listen [::]:443 ssl http2;

Директива из модуля, которого нет

Часть директив есть только в дополнительных модулях. Пока модуль не установлен, nginx их не знает. В Ubuntu 24.04 модули ставятся отдельными пакетами:

ДирективаПакет
more_set_headers, more_clear_headerslibnginx-mod-http-headers-more-filter
brotli, brotli_typeslibnginx-mod-http-brotli-filter
brotli_staticlibnginx-mod-http-brotli-static
sudo apt install libnginx-mod-http-headers-more-filter

Пакет сам подключает модуль: кладёт ссылку на него в папку /etc/nginx/modules-enabled/. После установки переходите к шагу 3.

Если директиву вы взяли из чужой инструкции и не знаете, из какого она модуля, найдите её в указателе директив. Если её там нет, это директива стороннего модуля. Если в описании сказано, что директива доступна как часть коммерческой подписки, в обычном nginx её нет — удалите строку.

Строки из настроек Apache

nginx не читает файлы .htaccess и не понимает настроек Apache. Если в файл сайта скопировали строки из .htaccess или из настроек Apache, удалите их и запишите то же самое директивами nginx:

Apachenginx
<VirtualHost *:80>server { и внутри listen 80;
ServerName example.comserver_name example.com;
ServerAlias www.example.comвторое имя в той же строке: server_name example.com www.example.com;
DocumentRoot /var/www/example.comroot /var/www/example.com;
DirectoryIndex index.htmlindex index.html;
ErrorDocument 404 /404.htmlerror_page 404 /404.html;
Redirect 301, RewriteRulereturn 301 или rewrite — см. документацию модуля rewrite

В конце каждой строки nginx ставьте точку с запятой — в Apache её нет.

Невидимые символы

Если слово в кавычках написано правильно, в строке могут быть символы, которых не видно на экране. Они попадают в файл при копировании текста из мессенджеров, документов Word и с некоторых сайтов:

  • неразрывный пробел вместо обычного. nginx считает его частью слова, поэтому в кавычках оказываются два слова через пробел: unknown directive "server_name example.com";
  • метка BOM в самом начале файла. Её добавляют редакторы, если файл сохранён в кодировке «UTF-8 с BOM» — такой пункт есть, например, в Блокноте Windows. Признак — ошибка в строке 1 при правильном слове, например unknown directive "server".

Покажите невидимые символы командой cat с ключами -v и -n (номера строк):

cat -vn /etc/nginx/sites-available/example.com | head -n 20
     1  M-oM-;M-?server {
     2      listen 80;
     3      listen [::]:80;
     4      server_nameM-BM- example.com;

M-oM-;M-? в начале строки 1 — метка BOM, M-BM- в строке 4 — неразрывный пробел. Русские буквы в комментариях тоже показываются как M- — на них не смотрите.

Как исправить: откройте файл в nano на этой строке, нажмите Ctrl+K — строка удалится целиком, — и наберите её заново с клавиатуры.

Шаг 3. Проверьте и примените настройки

Сохраните файл: Ctrl+O, Enter, затем Ctrl+X. Проверьте настройки ещё раз командой sudo nginx -t. Когда в ответе будут слова syntax is ok и test is successful, примените их:

sudo systemctl reload nginx

Если команда ничего не ответила, настройки применены.

Как проверить

sudo nginx -t отвечает syntax is ok и test is successful, а сайт открывается в браузере.

Похожие ошибки

СообщениеЧем отличается
directive is not allowed herenginx знает директиву, но она стоит не в том блоке
invalid number of argumentsДиректива верная, но значений у неё больше или меньше, чем нужно
unexpected "}"Ошибка в скобках, а не в словах

Тексты сообщений на этой странице сверены с исходным кодом nginx 1.24.0 — эта версия стоит в Ubuntu 24.04. В других версиях слова могут немного отличаться.

Источники

Сверено 9–10 октября 2026 года.

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

Проверено и обновлено: 10.10.2026