Параметр default_server в директиве listen конфигурации Nginx определяет поведение сервера при обработке запросов, которые не соответствуют ни одному другому настроенному виртуальному хосту (server block).
Что означает этот параметр?
При наличии нескольких виртуальных хостов на одном домене или IP-адресе запросы распределяются следующим образом:
Если клиент отправляет HTTP-запрос с заголовком Host, соответствующим одному из настроенных серверов, запрос обрабатывается именно этим сервером.
Если значение заголовка Host отсутствует или не соответствует ни одному известному серверу, запрос отправляется на сервер, помеченный параметром default_server.
Таким образом, сервер с настройкой default_server является резервным вариантом обработки всех незаданных или некорректных запросов.
Когда полезно использовать?
Использование default_server особенно актуально в следующих случаях:
Разработка и тестирование: Можно настроить отдельный сервер для тестирования нового функционала или разработки новых проектов, назначив его дефолтовым.
server {
listen 80 default_server;
server_name example.com www.example.com;
# настройки тестового сервера
}
Обслуживание старых версий сайтов: Например, если старый сайт всё ещё доступен по старому домену, но новый основной проект расположен на другом сервере, устаревшие запросы будут перенаправляться на дефолтовый сервер.
Защита от нежелательных обращений: Можно создать простой сервер с ограниченным доступом или пустым содержимым, чтобы предотвратить обработку ошибочных запросов основным сайтом.
Безопасность: Если запросы поступают с неизвестных доменов или содержат неверные значения заголовков, их можно обрабатывать специальным образом, предотвращая атаки или злонамеренное использование ресурса.
Как выглядит пример конфигурации?
Основной сервер для конкретных доменов
server {
listen 80;
server_name mysite.ru www.mysite.ru;
# настройки основного сайта
}
Дефолтовый сервер для остальных запросов
server {
listen 80 default_server;
server_name _;
return 444; # закрываем соединение без ответа
}
В данном примере любые запросы, не соответствующие доменам mysite.ru, будут обработаны вторым сервером, возвращающим код статуса 444, означающий закрытие соединения без отправки ответа клиенту.
Таким образом, параметр default_server помогает обеспечить гибкость и контроль над обработкой запросов, минимизируя риск ошибок и повышая уровень защиты системы.