Ошибка nginx duplicate location: два одинаковых блока location
В одном блоке server два блока location с одинаковым адресом. Перенесите строки из второго блока в первый, а второй удалите.
Содержание 9
Что сделать прямо сейчас
- Найдите оба блока location с этим адресом — шаг 1.
- Перенесите строки из второго блока в первый, второй удалите, — шаг 2.
- Проверьте и примените настройки — шаг 3.
Все команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
Что значит это сообщение
2026/10/09 12:00:00 [emerg] 2345#2345: duplicate location "/" in /etc/nginx/sites-enabled/example.com:20
nginx: configuration file /etc/nginx/nginx.conf test failed«Повторяется location "/"». Блок location задаёт настройки для адресов, которые начинаются с указанного пути. В одном блоке server два location с одинаковым путём, и nginx не знает, какой из них брать. Номер в конце — строка второго блока. Дата, время и номер процесса у вас будут свои. В других сборках nginx та же строка начинается со слов nginx: [emerg].
Одинаковыми считаются блоки с одним и тем же путём, если оба со знаком = или оба без него. location / и location ^~ / тоже совпадут. А location / и location = / — разные блоки, ошибки не будет. Блоки с регулярными выражениями — со знаком ~ — nginx так не проверяет.
Причины:
- в файл сайта вставили блок из инструкции, а такой location в файле уже был;
- одинаковый location пришёл из файла, который подключён строкой include.
Шаг 1. Найдите оба блока
grep -n 'location' /etc/nginx/sites-available/example.comПример ответа:
12: location / {
20: location / {Блоки начинаются на строках 12 и 20.
Если путь в сообщении ведёт в другой файл
Если в сообщении не файл сайта, а, например, файл из /etc/nginx/snippets/, второй блок пришёл через строку include. Уберите повтор в одном из двух файлов.
Шаг 2. Объедините их в один
Откройте файл на строке второго блока:
sudo nano -l +20 /etc/nginx/sites-available/example.comНапример, было так:
location / {
try_files $uri $uri/ =404;
}
location / {
client_max_body_size 20m;
}Перенесите строки из второго блока в первый, а второй удалите целиком — от location / { до его }. Удалять строки удобно сочетанием Ctrl+K. Должно получиться так:
location / {
try_files $uri $uri/ =404;
client_max_body_size 20m;
}Если в двух блоках одна и та же директива с разными значениями, оставьте одну — с тем значением, которое вам нужно. Сохраните файл: Ctrl+O, Enter, затем Ctrl+X.
Шаг 3. Проверьте и примените настройки
Проверьте настройки ещё раз командой sudo nginx -t. Когда в ответе будут слова syntax is ok и test is successful, примените их:
sudo systemctl reload nginxЕсли команда ничего не ответила, настройки применены.
Как проверить
sudo nginx -t отвечает syntax is ok и test is successful. Откройте сайт и проверьте, что работает то, ради чего добавляли второй блок.
Похожие ошибки
| Сообщение | Чем отличается |
|---|---|
| a duplicate default server | Повторяется пометка default_server на одном порту |
| conflicting server name | Одно имя сайта в двух блоках server |
| directive is not allowed here | location стоит не внутри блока server |
Тексты сообщений на этой странице сверены с исходным кодом nginx 1.24.0 — эта версия стоит в Ubuntu 24.04. В других версиях слова могут немного отличаться.
Источники
- Исходный код nginx 1.24.0: ngx_http.c — текст duplicate location и какие блоки сравниваются.
- Документация nginx: модуль ngx_http_core_module — директива location: виды блоков и как nginx выбирает нужный.
- Справка nano — Ctrl+K удаляет строку.
Сверено 9–10 октября 2026 года.
Что почитать дальше
- Все ошибки nginx.
- Как разместить сайт на VPS: шаг 4 — как выглядит файл сайта.
- 413 Request Entity Too Large — что значит client_max_body_size.
Проверено и обновлено: 10.10.2026