У веб-сервера Nginx есть один фатальный недостаток — он пытается ответить на любой входящий запрос. Причём он отвечает даже на те запросы, в host-заголовке которых указан домен, который не был сконфигурирован! В этом случае Nginx выбирает первую попавшуюся секцию server и отдаёт ей запрос, даже если внутри этой секции значения директив server_name не соответствуют значению host-заголовка запроса.
Такое поведение может приводить к путанице и неразберихе. Поэтому достаточно часто возникает задача — разрешить nginx отвечать только на те запросы, для которых был сконфигурирован server_name.
Делается это достаточно просто, нужно в файле nginx.conf сконфигурировать сервер-заглушку без указания server_name и указать в качестве первого по списку сервера в секции http:
server { listen 80; return 444; }
http { .... server { another; } include /etc/nginx/conf.d/*.conf; }
Такая конфигурация создаст дефолтный сервер, который будет отвечать на запросы для всех доменов, которые небыли явно сконфигурированы. А в ответ будет отдавать просто статус 444 Connection Closed Without Response. В качестве дополнения можно добавить логгирование всех запросов попадающих на дефолтный пустой сервер:
access_log /var/log/nginx/empty-access.log main;