NGINX
#nginx#default-server#security#server-blocks#protection

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 — этот блок становится дефолтным для порта 80
  • server_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 более явный, но требует отправки ответа.