1. 1
  2. 2
  3. 3
  4. 4

# конспект · шаг 4 из 4

Конспект: default_server и чужие запросы

выжимка - её можно унести в заметки

Что происходит с запросом, чей Host не совпал ни с одним server_name.

Правило по умолчанию

Не совпало ничего - отвечает первый блок на этом порту. То есть чужой домен, направленный на твой адрес, получит твой главный сайт. Это и попадает в поисковые индексы, и путает статистику.

Блок-заглушка

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 444;
}
Часть Что значит
default_server сюда всё, что не совпало ни с одним именем
server_name _; не «любое имя», а просто заведомо невалидное имя-заглушка
return 444 нестандартный код nginx: закрыть соединение без ответа

Проверка своего сервера

$  команда
curl -sI -H "Host: definitely-not-your-domain.com" http://твой-ip/

Приехала твоя главная страница - catch-all блока нет.

На HTTPS заглушка тоже нужна

Соединение на 443 начинается с TLS-рукопожатия, и сертификат предъявляется до того, как сервер увидит Host. Без заглушки nginx возьмёт сертификат первого блока и покажет его всем чужим доменам. С nginx 1.19.4 сертификат ей не нужен вовсе:

server {
    listen 443 ssl default_server;
    server_name _;
    ssl_reject_handshake on;
}

Рукопожатие обрывается предупреждением 112 unrecognized_name, и чужой домен не видит ни сертификата, ни имени твоего сайта. Вариант «положить сертификат основного сайта» работает, но показывает это имя каждому.

Ловушки джокера

  • Заглушку обходит более точный адрес. Блок по умолчанию свой у каждой пары «адрес и порт», а listen 80 и listen 127.0.0.1:80 - разные адреса. Если на точном адресе есть хоть один блок, он же и блок по умолчанию, хотя флага ему никто не писал. Проверять заглушку надо на том адресе, куда приходят чужие запросы.
  • Флаг забыли, а заглушка «работает». Так бывает, если файл называется 00-default.conf и подключается первым: блок оказался умолчательным по порядку, а не по флагу. Переименуют файл - защита исчезнет.
  • a duplicate default server for 0.0.0.0:80 - флаг поставлен двум блокам на один адрес и порт.

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.