Nginx: настройка хоста по умолчанию

Хост по умолчанию используется тогда, когда в заголовке запроса Host: передано имя хоста, отсутствующего на сервере или этот заголовок вообще в запросе не передан. Если в конфигах ни один хост не определён как хост по умолчанию, то будет использован хост, стоящий первым по счёту в конфиге.

Хост по умолчанию необходимо определять всегда, даже когда сервер используется для единственного сайта. Если это не сделать, то, с одной стороны, злоумышленникам будет легче прощупывать уязвимости сайта, а с другой стороны, будет возможность использовать ваш контент для продвижения чужих доменов (воровать клики), поскольку никто не может воспрепятствовать созданию для любого домена A-записи, указывающей на любой ip-адрес.

Хост по умолчанию описывается в конфиге с помощью ключевого слова default_server в директиве  listen:

server {
listen *:80 default_server;
listen [::]:80 default_server;
return 444;
}

server {
listen *:443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_certificate /etc/nginx/ssl/default.pem; ##самоподписной сертификат
ssl_certificate_key /etc/nginx/ssl/default.pem;
return 444;
}

Отдельно надо сделать хосты по умолчанию для http и для https. В примере указано действие return 444, кода 444 в списке кодов http нет и в nginx этот код используется для того, чтобы сбросить соединение без какого бы то ни было ответа, то есть не позволяет даже узнать, работает ли там вообще веб-сервер. Такой подход не оставляет злоумышленникам шансов прощупать сервер, не зная имени домена, а для любителей воровать клики приведёт к тому, что из домен будет признан поисковиками неработающим. Как вариант — можно редиректить все запросы на свой сайт, от кражи кликов это спасёт, но от прощупывания — нет.