Запись или cname

Запись или cname

У меня есть сервер (Ubuntu + Apache), на котором мы размещаем приложение, в котором клиенты могут создавать свои собственные поддомены, т. е. по сути поддомены с подстановочными знаками.

У нас есть клиент, который хочет указать свой собственный домен (www.client.com) на свой уникальный поддомен (client.app.com) на нашем сервере. Это должно происходить прозрачно, так что когда кто-то вводит www.client.com, URL все равно показывает www.client.com, но все прозрачно работает на client.app.com

Следует ли ему создать в своем DNS запись A, указывающую на наш IP-адрес, или cname, указывающую на client.app.com?

Есть ли какие-либо различия в виртуальном хосте, который нам нужно создать в каждом случае?

решение1

Следует ли ему создать в своем DNS запись A, указывающую на наш IP-адрес, или cname, указывающую на client.app.com?

Он должен использовать CNAME, указывающий на client.app.com. Есть много причин сделать это, но лучшая из них, вероятно, заключается в том, что это означает меньше изменений, которые нужно будет вносить в случае изменения IP-адреса сервера: нужно будет обновить только запись для client.app.com, а все остальное, что имеет CNAME для него, последует автоматически.

Другие причины включают невозможность иметь ту же запись имени A, что и запись MX, как упомянул один из других участников; а также общую философию, что хост должен иметь только одно «истинное имя» (запись A), а другие записи, указывающие на тот же хост, должны быть псевдонимами (CNAME). Конечно, эта философия рушится, когда у вас есть одна запись A, указывающая на несколько IP-адресов и несколько хостов (но это еще один хороший аргумент для клиента использовать CNAMES: если ваш сервис станет популярным, вам нужно будет масштабировать его путем балансировки нагрузки на другие хосты, которые обслуживают те же вещи, вы бы хотели, чтобы ваш клиент выиграл от этого, не меняя ничего). (Конечно, есть много способов балансировки нагрузки и масштабирования, и вы можете с таким же успехом выбрать тот, который не привязан к DNS, но это зависит от вашей реализации.)

Есть ли какие-либо различия в виртуальном хосте, который нам нужно создать в каждом случае?

Независимо от выбранного вами метода DNS вам необходимо убедиться, что Apache настроен на прием других имен.

так что когда кто-то вводит www.client.com, URL все равно показывает www.client.com, но все прозрачно работает на client.app.com

Конечно, вам захочется самостоятельно подтвердить нижеизложенное, изучив документацию Apache, но я могу предложить два способа сделать это:

  1. UseCanonicalName Offс ServerAliasвнутри каждогоVirtualHostвход:

    UseCanonicalName Off <VirtualHost *:80> ServerName www.client.com ServerAlias client.app.com DocumentRoot /www/client </VirtualHost>

  2. Использовать несколькоServerNameиVirtualHostзаписи:

    <VirtualHost *:80> ServerName www.client.com DocumentRoot /www/client </VirtualHost> <VirtualHost *:80> ServerName client.app.com DocumentRoot /www/client </VirtualHost>

Помните, что при использовании любого из методов вам, возможно, придется убедиться, что HTML и все связанные с ним скрипты работают «правильно», чтобы правильно генерировать URL-адреса для желаемого вами поведения.

Здесь также есть много хороших примеров и интересных обсуждений:http://httpd.apache.org/docs/2.4/vhosts/mass.htmlпо теме.

Связанный контент