Обычно для каждого поддомена в DNS добавляют отдельную запись: www, shop, mail и так далее. Wildcard-запись, то есть запись со звёздочкой, одной строкой отвечает на все имена, которые не описаны в зоне явно. Например, если для *.example.uz указана A-запись, то abc.example.uz, test.example.uz и даже опечатка wwww.example.uz попадут на этот сервер. Инструмент очень удобный, но без понимания его правил и побочных эффектов он создаёт проблемы и сайту, и почте.
Как работает совпадение
Wildcard срабатывает только для имён, которых в зоне нет. Если для shop.example.uz есть отдельная запись, звёздочка на него не влияет. Важная тонкость: если у имени есть запись любого типа, например только TXT, имя считается существующим, и A-запрос к нему получит не ответ wildcard, а пустой ответ. Звёздочка также не действует на сам домен example.uz — для корня нужна отдельная запись.
example.uz. 3600 IN A 203.0.113.10
*.example.uz. 3600 IN A 203.0.113.10
shop.example.uz. 3600 IN A 203.0.113.20
Есть и менее известное правило: звёздочка может работать не только на одном уровне. При запросе a.b.example.uz, если имени b.example.uz в зоне нет вовсе, ответ берётся из *.example.uz. Но если b.example.uz существует, верхняя звёздочка для имён под ним не работает, и при необходимости отдельно пишут *.b.example.uz. Проверить легко:
dig +short A tasodifiy-nom.example.uz
dig +short A a.b.example.uz
dig +short A shop.example.uz
Где это действительно полезно
Классический случай — многоклиентские сервисы. Например, ташкентский стартап запустил платформу онлайн-витрин для небольших магазинов, и каждый магазин получает адрес вида dokon-nomi.misol.uz. Вместо добавления DNS-записи для каждого нового клиента одна wildcard-запись направляет все поддомены на сервер приложения, а приложение по заголовку Host показывает нужный магазин. Адрес нового магазина начинает работать сразу после регистрации.
Второй случай — среды разработки и тестирования. Разработчики создают временные адреса вида feature-123.dev.example.uz для каждой ветки и не добавляют их в DNS каждый раз. В этом случае wildcard обычно ставят под отдельным тестовым поддоменом, например *.dev.example.uz, а не в основной зоне.
Веб-сервер тоже должен принимать эти имена. В Nginx server_name поддерживает звёздочку и регулярные выражения; второй вариант позволяет вынести имя поддомена в переменную:
server {
listen 443 ssl;
server_name ~^(?<tenant>[a-z0-9-]+)\.misol\.uz$;
root /var/www/platform/public;
location / {
fastcgi_param TENANT $tenant;
# ...
}
}
Риски wildcard-записи
Первый риск связан с SEO. Если wildcard ведёт на основной сайт, а сервер отдаёт одну и ту же страницу на любое имя, появляется бесконечное число дублей вида lyuboe-slovo.example.uz. Если поисковики их найдут, возникнет проблема дублированного контента. Решение простое: для неизвестных поддоменов сервер должен возвращать 404 или делать 301-редирект на основной домен.
Второй риск — доверие и фишинг. При наличии wildcard любое имя вроде login-bank.example.uz откроется на вашем сервере. Если в приложении есть уязвимость, отражающая пользовательский ввод на странице, злоумышленник может распространять ссылки с правдоподобным поддоменом. Третий риск — скрытие ошибок: опечатка в адресе api2.example.uz не даст ошибку «домен не найден», а приведёт на неправильный сервер, и проблему обнаружат поздно.
Четвёртый риск касается почты и служебных записей. Wildcard MX заставляет принимать письма на несуществующие поддомены и увеличивает поток спама. Wildcard TXT может запутать проверки SPF и другие. Поэтому в почтовых записях звёздочку лучше не использовать. Кроме того, если *.example.uz указывает CNAME на внешний сервис и аккаунт в этом сервисе закрыт, появляется риск, что кто-то другой захватит любой ваш поддомен.
Wildcard SSL-сертификат
Звёздочка в DNS и звёздочка в сертификате — разные вещи. Сертификат *.example.uz покрывает только один уровень: он подходит для shop.example.uz, но не для a.b.example.uz и не для самого домена, поэтому в сертификат обычно включают оба имени. Let's Encrypt выдаёт wildcard-сертификаты только через проверку DNS-01: нужно добавить в зону TXT-запись _acme-challenge.
certbot certonly --manual --preferred-challenges dns \
-d example.uz -d '*.example.uz'
В ручном режиме и продление выполняется вручную, поэтому на практике используют плагин, работающий с API DNS-провайдера, или другую автоматизацию. Бесплатные сертификаты Let's Encrypt на хостинге sayt.uz продлеваются автоматически; если нужен wildcard-сертификат, уточните возможность в личном кабинете или в техподдержке.
Практические правила безопасного использования
- Ставьте wildcard как можно уже: вместо
*.example.uz—*.app.example.uzили*.dev.example.uz. - Для важных поддоменов, например
www,mailиapi, всегда добавляйте явные записи. - Пусть веб-сервер отвечает на неизвестные имена кодом 404 или редиректом на основной домен.
- Не используйте звёздочку в записях MX и TXT.
Wildcard-запись добавляется в разделе DNS личного кабинета sayt.uz: в поле имени указывается *. После добавления проверьте несколько случайных имён через dig и убедитесь, что они ведут на ожидаемый адрес и ожидаемую страницу.