Назад | Перейти на главную страницу

Следует ли использовать CNAME для поддоменов?

Я управляю несколькими веб-сайтами, которые в настоящее время имеют следующую конфигурацию DNS:

example.com      - A Record - Production Server IP
test.example.com - A Record - Test Server IP
www.example.com  - CNAME    - example.com
beta.example.com - CNAME    - test.example.com
dev.example.com  - CNAME    - test.example.com

Это уместное использование записей CNAME? Я поискал в Интернете и не нашел четкого ответа. Некоторые люди утверждают, что записи CNAME плохие (однако они не понимают, почему это так), и предлагают следующую настройку:

example.com      - A Record - Production Server IP
test.example.com - A Record - Test Server IP
www.example.com  - A Record - Production Server IP
beta.example.com - A Record - Test Server IP
dev.example.com  - A Record - Test Server IP

Какой из этих подходов лучше (и почему)?

Примечание: Субдомены не требуют собственных записей MX, так что здесь это не проблема.

Да, это подходящее использование CNAME. В дискуссиях, в которых я участвовал, аргументы, как правило, звучат так:

Против CNAME:

  • Это (крошечное) снижение производительности, так как нисходящие кэши DNS должны выполнить 2 поиска DNS, один для CNAME и один для A-записи, на которую указывает CNAME.
  • Расплывчатые, фальшивые аргументы в пользу того, что CNAME имеют меньше "полномочий" или проблем с совместимостью.

В пользу CNAME:

  • Они обеспечивают чистую абстракцию между оборудованием (физическими серверами) и службами.
  • Они упрощают управление DNS - когда сервер перемещается, вам нужно изменить только одну запись.

Попробовав несколько разных способов для этого у меня теперь есть личный любимый стиль. Это:

  • Одна запись A для каждого физического сервера; с довольно низким TTL (возможно, 30 минут); давая серверу понятное для человека имя.
  • Один CNAME для каждой службы; с высоким TTL (возможно, 24 часа); указывая на указанные выше имена серверов.
  • В качестве единственного исключения из приведенных выше правил корнем домена является A-запись, указывающая на веб-сервер / балансировщик веб-нагрузки. (@ Должен быть A-рекордом.)

Я считаю, что эта установка работает хорошо. Он запрещает дополнительные поиски DNS для CNAMES; и если сервер выйдет из строя, я все равно могу довольно быстро изменить общедоступный DNS.

Вот (импровизированный) пример в синтаксисе BIND:

;name     ttl   class rr     value 
server01  30m   IN    A      192.168.0.3
server02  30m   IN    A      192.168.0.4

webmail   24h   IN    CNAME  server01
extranet  24h   IN    CNAME  server02
ftp       24h   IN    CNAME  server02

Да, это уместно.

Мои лучшие практики, которыми разделяют многие люди, заключаются в создании 1 записи A для каждого IP-адреса сервера; и используйте CNAMES для чего-нибудь еще.

Типичный пример:

server1.example.com.      IN A      192.168.0.1
server2.example.com.      IN A      192.168.5.2
www                       IN CNAME  server1
ftp                       IN CNAME  server1
beta                      IN CNAME  server2