Ошибки

Ошибка nginx directive is not allowed here: директива не в том блоке

Директива написана правильно, но стоит не в том блоке: например, location оказался вне server или proxy_pass — вне location. Перенесите строку в нужный блок.

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

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

  1. Откройте файл на строке из сообщения — шаг 1.
  2. Посмотрите в таблице, где может стоять эта директива, и перенесите её — шаг 2.
  3. Проверьте и примените настройки — шаг 3.

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

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

2026/10/09 12:00:00 [emerg] 2345#2345: "location" directive is not allowed here in /etc/nginx/sites-enabled/example.com:6

is not allowed here — «здесь не разрешена». Настройки nginx вложены друг в друга: блок http содержит блоки server, а server — блоки location. У каждой директивы своё место. Если она оказалась не в том блоке, nginx останавливается.

Файлы сайтов из /etc/nginx/sites-enabled/ nginx подключает внутри блока http — это строка 60 файла /etc/nginx/nginx.conf. Поэтому в файле сайта на верхнем уровне должны стоять блоки server, а остальное — внутри них. Дата, время и номер процесса у вас будут свои. В других сборках nginx та же строка начинается со слов nginx: [emerg].

Так выглядит простой файл сайта — такой же, как в инструкции Как разместить сайт на VPS: nginx с нуля. Каждая строка внутри фигурных скобок кончается точкой с запятой, а у каждой открывающей скобки { есть своя закрывающая }.

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

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

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

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

Шаг 2. Перенесите директиву в нужный блок

Директива в кавычкахГде может стоятьЧто случилось
locationВнутри server или другого locationlocation оказался после закрывающей скобки server — пример ниже
listen, server_nameТолько внутри serverСтрока стоит вне server или внутри location
proxy_passВнутри locationproxy_pass написан прямо в server — пример ниже
serverВнутри http — в файле сайта на верхнем уровнеОдин блок server вложили в другой
httpТолько в /etc/nginx/nginx.confВ файл сайта скопировали блок http { … } — пример ниже
user, worker_processes, events, pidТолько в /etc/nginx/nginx.confВ файл сайта скопировали начало чужого nginx.conf — удалите эти строки, в nginx.conf они уже есть

location после закрывающей скобки

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com;
}
    location / {
        try_files $uri $uri/ =404;
    }
}

Скобка в строке 5 закрыла блок server раньше времени, и location в строке 6 оказался снаружи. Удалите лишнюю } в строке 5: блок server должна закрывать последняя скобка файла.

proxy_pass прямо в server

server {
    listen 80;
    server_name example.com;
    proxy_pass http://127.0.0.1:3000;
}

proxy_pass может стоять только внутри location. Оберните строку в location / { и }:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

Блок http в файле сайта

2026/10/09 12:00:00 [emerg] 2345#2345: "http" directive is not allowed here in /etc/nginx/sites-enabled/example.com:1

Файл сайта уже подключается внутри http, а второй блок http внутри первого быть не может. Удалите строку http { в начале и её закрывающую } в конце файла. Оставьте в файле только блоки server целиком, а остальные строки из бывшего блока http удалите: общие настройки в Ubuntu уже есть в /etc/nginx/nginx.conf.

Шаг 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. Если появилась другая ошибка — например, unexpected "}", — значит, первая исправлена и nginx дочитал файл дальше. Исправьте и её.

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

СообщениеЧем отличается
unknown directivenginx вообще не знает такого слова
unexpected "}"Лишняя закрывающая скобка в конце файла
directive … is not terminated by ";"Забыта точка с запятой перед блоком

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

Источники

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

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

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