Вчера многие обратили внимание на конструкцию в Nginx:

server_name _;

Что это, блядь, за «чёрточка» вместо сервернейма?

Если техническим языком — это подстановочное имя хоста.

Пусть на сервере прописано так:

server {
    listen 80;
    server_name _;
    return 444;
}

server {
    listen 80;
    server_name bashdays.ru;
    return 200;
}

server {
    listen 80;
    server_name linuxfactory.ru;
    return 200;
}

Если в браузере откроем bashdays.ru или linuxfactory.ru, то получим статус 200.

А как получить 444, тот самый с «чёрточкой»?

Просто! Например, зайти на сервер по его IP-адресу. Nginx не сможет сопоставить доменные имена, которые прописаны в конфиге, и отдаст статус 444.

То есть «чёрточка» — это что-то типа заглушки. Nginx не воспринимает её как специальный символ, это обычное имя хоста, которое можно использовать для обработки запросов, не соответствующих другим явно указанным доменам.

Обычно эту «чёрточку» прописывают в файле defaults, чтобы тот, кто попал на сервер по IP-адресу, увидел то, что ты захочешь, а не рандомный сайт, который у тебя висит на сервере.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Короче, если запрос приходит с именем хоста, которое не совпадает ни с одним из явно прописанных server_name, то он будет обрабатываться этим серверным блоком.

А в сочетании с return 444 (No Response) используется для закрытия нежелательных запросов или для обработки некорректных запросов.

Если «чёрточка» не используется, то вместо неё можно просто прописать default_server в директиве listen, и блок будет работать аналогично.

server {
    listen 80 default_server;
    return 444;
}

Вот так вот и живём, изучай!