server_name в nginx: имена сайта и сервер по умолчанию
server_name — строка в блоке server со списком имён, на которые отвечает сайт. nginx сравнивает имя из запроса с этими списками и выбирает блок. Если имя не подошло ни к одному, запрос получает сервер по умолчанию для этого порта.
Содержание 7
Что сделать прямо сейчас
- Команды вводятся на сервере: подключитесь к нему по SSH ([как подключиться](/instrukcii/kak-podklyuchitsya-k-vps-po-ssh/)) и набирайте их в том же окне.
- Откройте файл сайта:
sudo nano /etc/nginx/sites-available/example.com. Вместо example.com — имя файла вашего сайта: список покажетls /etc/nginx/sites-enabled/. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - Нажмите Ctrl+W, введите
server_nameи нажмите Enter — курсор встанет на строку с этой директивой. - Впишите через пробел все имена сайта, в конце — точка с запятой:
server_name example.com www.example.com; - Сохраните файл — Ctrl+O, Enter, затем Ctrl+X — и проверьте настройки:
sudo nginx -t. В ответе должны быть слова syntax is ok и test is successful. Тогда примените их:sudo systemctl reload nginx. Если команда ничего не ответила, настройки применены. - Откройте сайт в браузере по каждому имени. Если вместо сайта видна стартовая страница nginx или другой ваш сайт, имя не совпало — см. Как nginx выбирает сайт.
Чтобы имя открывало сайт, домен должен быть направлен на IP-адрес сервера записью DNS — шаг 1 инструкции по размещению сайта.
Как записывать имена
| Запись | Какие имена подходят |
|---|---|
example.com | только example.com |
example.com www.example.com | оба имени — без www и с www |
*.example.com | любой поддомен: www.example.com, shop.example.com и даже a.shop.example.com; само example.com — нет |
.example.com | example.com и все его поддомены |
www.example.* | www.example.com, www.example.ru и другие окончания |
~^shop\d+\.example\.com$ | регулярное выражение: shop1.example.com, shop25.example.com |
_ | ни одно настоящее имя — так пишут в сервере по умолчанию |
Звёздочка ставится только в начале или в конце имени и только у точки: имена вроде w*.example.com некорректны, для них нужно регулярное выражение. Регулярное выражение начинается со знака ~, точки в нём пишут как \.. Первое имя в списке nginx считает основным.
Если строки server_name в блоке нет, у блока пустое имя: он подходит к запросам без имени, например от программ, которые не передают заголовок Host.
Как nginx выбирает сайт
Браузер передаёт имя сайта в запросе — в заголовке Host. Сначала nginx отбирает блоки server, которые слушают порт запроса, затем сравнивает имя с их server_name в таком порядке:
- точное имя, например
example.com; - самая длинная маска со звёздочкой в начале, например
*.example.com; - самая длинная маска со звёздочкой в конце, например
www.example.*; - первое подходящее регулярное выражение — по порядку в настройках.
Поиск останавливается на первом совпадении. Поэтому точное www.example.com в одном блоке победит маску *.example.com в другом, где бы эти блоки ни стояли.
Сервер по умолчанию
Если имя не подошло ни к одному блоку — сайт открыли по IP-адресу сервера или на сервер направлен чужой домен, — запрос получает сервер по умолчанию. Это блок, у которого в строке listen стоит default_server. Если такого блока нет, сервером по умолчанию становится первый блок server с этим портом в настройках.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
...
}Так начинается стартовый сайт nginx в Ubuntu — файл /etc/nginx/sites-available/default. Пока ссылка на него есть в sites-enabled, на запросы по IP и по чужим именам отвечает стартовая страница nginx. В инструкции по размещению сайта эту ссылку убирают — тогда на такие запросы ответит первый по порядку из ваших сайтов.
default_server — свойство порта, а не имени, поэтому его пишут в строке listen. На одном порту сервер по умолчанию может быть только один: второй nginx не примет — ошибка a duplicate default server. Для порта 443 сервер по умолчанию свой: в Ubuntu его строки в файле default закомментированы, и для HTTPS им становится первый блок с listen 443 ssl.
Чтобы запросы по IP и на чужие имена не попадали в ваши сайты, заведите отдельный сервер по умолчанию с ответом 444 — как отсечь запросы по IP и на чужие имена и то же для HTTPS.
Какой блок сейчас сервер по умолчанию, покажет поиск по всем включённым сайтам:
grep -Rn 'default_server' /etc/nginx/sites-enabled/Если в ответе пусто, сервер по умолчанию — первый блок server с этим портом. Порядок файлов покажет sudo nginx -T | grep -n '# configuration file'.
Ошибки и как их исправить
| Что видите | Что делать |
|---|---|
conflicting server name "…" on 0.0.0.0:80, ignored | одно имя стоит в двух блоках server |
a duplicate default server | default_server у двух блоков на одном порту |
could not build server_names_hash | длинное имя сайта |
| вместо сайта стартовая страница nginx | имя не совпало: проверьте строку server_name и что ссылка на файл сайта есть в sites-enabled |
| по https:// открывается другой ваш сайт | для этого имени нет блока с listen 443 ssl — запрос попал в сервер по умолчанию для порта 443 |
Источники
- Документация nginx: имена сервера — точные имена, маски и регулярные выражения, порядок выбора.
- Документация nginx: как nginx обрабатывает запросы — выбор сервера по полю Host и сервер по умолчанию для порта.
- Документация nginx: server_name — по умолчанию пустое имя, первое имя в списке — основное.
- Документация nginx: listen — параметр default_server: сервер по умолчанию для пары адрес:порт.
- Файл sites-available/default из пакета nginx в Ubuntu 24.04 — сайт по умолчанию:
listen 80 default_server,server_name _, try_files. - man grep — ключ -r не заходит в ссылки внутри папки, ключ -R заходит во все.
Сверено 14 октября 2026 года.
Что почитать дальше
- Настройки nginxкак устроены файлы и блоки, главные директивы.
- location в nginxправила для части адресов сайта.
- Код 444 в nginxкак отсечь запросы по IP, на чужие имена и от сканеров.
- Несколько сайтов на одном серверевторой сайт рядом с первым.
- Как оставить один адрес: с www или безпереадресация 301 между именами.