Nginx: default server для защиты от мусорных запросов
Настройка default server в Nginx для отклонения запросов по IP и неизвестным доменам. Защита от сканеров и экономия ресурсов.
Настройка default server для отклонения запросов по IP и неизвестным доменам. Защищает от сканеров и экономит ресурсы сервера.
Базовая настройка default server
server {
listen 80 default_server;
server_name _;
return 444;
}
Что происходит:
listen 80 default_server— этот блок становится дефолтным для порта 80server_name _— специальное значение, означает “любой домен, который не совпал”return 444— закрывает соединение без ответа (экономит трафик)
Альтернативный вариант (с ответом 403)
server {
listen 80 default_server;
server_name _;
return 403;
}
Возвращает 403 Forbidden вместо закрытия соединения.
Default server для HTTPS (порт 443)
server {
listen 443 ssl default_server;
server_name _;
# Временный самоподписанный сертификат (для отклонения запросов)
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
return 444;
}
Default server с логированием
server {
listen 80 default_server;
server_name _;
# Логируем попытки доступа по IP или неизвестным доменам
access_log /var/log/nginx/default-access.log;
error_log /var/log/nginx/default-error.log;
return 444;
}
Default server с кастомной страницей
server {
listen 80 default_server;
server_name _;
root /var/www/default;
location / {
return 403;
}
# Кастомная страница 403
error_page 403 /403.html;
}
Проверка default server
# Запрос по IP должен вернуть 444 или 403
curl -H "Host: unknown-domain.com" http://YOUR_SERVER_IP
# Проверка через браузер
# Откройте http://YOUR_SERVER_IP — должно вернуть 403 или закрыть соединение
Полный пример с несколькими сайтами
# Default server (должен быть первым или явно указан default_server)
server {
listen 80 default_server;
server_name _;
return 444;
}
# Первый сайт
server {
listen 80;
server_name site1.ru www.site1.ru;
root /var/www/site1.ru/public;
# ...
}
# Второй сайт
server {
listen 80;
server_name site2.ru www.site2.ru;
root /var/www/site2.ru/public;
# ...
}
Default server для каждого порта
# HTTP (порт 80)
server {
listen 80 default_server;
server_name _;
return 444;
}
# HTTPS (порт 443)
server {
listen 443 ssl default_server;
server_name _;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
return 444;
}
Usage:
Добавьте default server блок в начало конфигурации или явно укажите default_server в listen. Это защитит от запросов по IP и неизвестным доменам.
Notes:
⚠️ Без default server Nginx использует первый server блок как дефолтный. return 444 закрывает соединение без ответа — это экономит трафик, но некоторые сканеры могут считать это ошибкой. return 403 более явный, но требует отправки ответа.