SystemdDoctor
служба не работает nginx конфигурация

nginx: [emerg] duplicate listen options и conflicting server name

Эти сообщения означают, что один и тот же адрес или имя сервера объявлены дважды. Чаще всего виноват включённый сайт по умолчанию, про который забыли, и ваш новый блок с теми же параметрами.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Остался включённый сайт по умолчанию

    В Debian и Ubuntu при установке включается сайт default с блоком на 80-м порту и параметром default_server. Новый блок с теми же параметрами приводит к конфликту.

  2. Параметры вроде ssl или http2 указаны в нескольких блоках

    Часть параметров директивы listen задаётся один раз на адрес. Повторение в другом блоке для того же адреса даёт «duplicate listen options».

  3. Одно имя сервера в двух блоках

    nginx предупреждает о конфликте имён и использует первый блок. Запросы уходят не туда, куда ожидалось.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Печатает конкретное сообщение о конфликте с файлом и строкой.

sudo nginx -t

Что включено: сайт default часто оказывается лишним.

ls -l /etc/nginx/sites-enabled/

Все адреса и имена в итоговой конфигурации.

sudo nginx -T 2>/dev/null | grep -n "listen\|server_name" | head -30

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Остался включённый сайт по умолчанию
Почему происходит
В Debian и Ubuntu при установке включается сайт default с блоком на 80-м порту и параметром default_server. Новый блок с теми же параметрами приводит к конфликту.
Как проверить
Посмотрите включённые сайты.
ls -l /etc/nginx/sites-enabled/
sudo nginx -T 2>/dev/null | grep -n "listen\|server_name" | head -20
Как исправить
Отключите сайт по умолчанию, если он не нужен.
sudo rm /etc/nginx/sites-enabled/default && sudo nginx -t && sudo systemctl reload nginx
2. Параметры вроде ssl или http2 указаны в нескольких блоках
Почему происходит
Часть параметров директивы listen задаётся один раз на адрес. Повторение в другом блоке для того же адреса даёт «duplicate listen options».
Как проверить
Найдите все объявления этого адреса.
sudo nginx -T 2>/dev/null | grep -n "listen" | sort -k2 | head -20
Как исправить
Оставьте параметры только в одном блоке для каждого адреса. Для остальных достаточно listen 443 ssl; без повторных параметров.
3. Одно имя сервера в двух блоках
Почему происходит
nginx предупреждает о конфликте имён и использует первый блок. Запросы уходят не туда, куда ожидалось.
Как проверить
Поищите повторяющиеся имена.
sudo nginx -T 2>/dev/null | grep server_name | sort | uniq -c | sort -rn | head
Как исправить
Уберите дубль или объедините блоки. Это предупреждение, но оно почти всегда означает ошибку в настройке.

Пример вывода

Параметры listen объявлены дважды для одного адреса. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

nginx[5210]: nginx: [emerg] duplicate listen options for 0.0.0.0:443 in /etc/nginx/sites-enabled/site2.conf:4
nginx[5210]: nginx: configuration file /etc/nginx/nginx.conf test failed

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация nginx: директива listen документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено двумя блоками с listen 443 ssl на тестовой машине.
    собственная проверка, systemd 255
    сверено 15 сентября 2026