Ошибка nginx unknown directive: nginx не знает такого слова
В строке из сообщения стоит слово, которого nginx не знает. Откройте файл на этой строке, сравните слово в кавычках с правильным названием и исправьте.
Содержание 9
Что сделать прямо сейчас
- Откройте файл на строке из сообщения — шаг 1.
- Посмотрите на слово в кавычках и найдите свой случай — шаг 2.
- Исправьте строку, проверьте и примените настройки — шаг 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 failedunknown 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 | Опечатка |
http2 | http2 в 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_headers | libnginx-mod-http-headers-more-filter |
brotli, brotli_types | libnginx-mod-http-brotli-filter |
brotli_static | libnginx-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:
| Apache | nginx |
|---|---|
<VirtualHost *:80> | server { и внутри listen 80; |
ServerName example.com | server_name example.com; |
ServerAlias www.example.com | второе имя в той же строке: server_name example.com www.example.com; |
DocumentRoot /var/www/example.com | root /var/www/example.com; |
DirectoryIndex index.html | index index.html; |
ErrorDocument 404 /404.html | error_page 404 /404.html; |
Redirect 301, RewriteRule | return 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 here | nginx знает директиву, но она стоит не в том блоке |
| invalid number of arguments | Директива верная, но значений у неё больше или меньше, чем нужно |
| unexpected "}" | Ошибка в скобках, а не в словах |
Тексты сообщений на этой странице сверены с исходным кодом nginx 1.24.0 — эта версия стоит в Ubuntu 24.04. В других версиях слова могут немного отличаться.
Источники
- Исходный код nginx 1.24.0: ngx_conf_file.c — как nginx читает файл настроек и тексты ошибок.
- Документация nginx: модуль HTTP/2 — с какой версии есть директива http2.
- Документация nginx: listen — параметр http2 в строке listen.
- Пакет libnginx-mod-http-headers-more-filter в Ubuntu 24.04 — файлы модуля.
- Как пакеты модулей nginx подключают модуль: postinst-nginx.
- man cat — ключи -v и -n.
Сверено 9–10 октября 2026 года.
Что почитать дальше
- Все ошибки nginx.
- Как разместить сайт на VPS: шаг 4 — как выглядит файл сайта.
- Указатель директив nginx.
Проверено и обновлено: 10.10.2026