У меня есть сервер (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?
Есть ли какие-то различия в виртуальном хосте, который нам нужно создать в любом случае?
Должен ли он в своем DNS создавать запись A, указывающую на наш IP-адрес, или cname, указывающее на client.app.com?
Он должен использовать CNAME, указывающую на client.app.com. Для этого есть много причин, но лучшая из них, вероятно, потому, что это означает, что при изменении IP-адреса сервера нужно будет вносить меньше изменений: нужно будет обновить только запись для client.app.com и все остальное, что есть CNAMEd к нему последует автоматически.
Другие причины включают невозможность иметь то же имя A-запись, что и MX-запись, как на одном из других упомянутых плакатов; а также общая философия, согласно которой у хоста должно быть только одно «истинное имя» (запись A), а другие записи, указывающие на тот же хост, должны быть псевдонимами (CNAME). Конечно, эта философия нарушается, когда у вас есть одна запись A, указывающая на несколько IP-адресов и несколько хостов (но это еще один хороший аргумент для клиента использовать CNAMES: если ваша служба становится популярной, вам необходимо масштабировать ее путем балансировки нагрузки до другие хосты, которые обслуживают то же самое, вы бы хотели, чтобы ваш клиент извлек выгоду из этого, не меняя ничего) (Конечно, есть много способов балансировки и масштабирования нагрузки, и вы можете так же легко выбрать тот, который не привязан к DNS, но это зависит от вашей реализации.)
Есть ли какие-то различия в виртуальном хосте, который нам нужно создать в любом случае?
Независимо от того, какой метод DNS вы выберете, вам необходимо убедиться, что apache настроен на прием других имен.
так что, когда кто-то вводит www.client.com, URL-адрес все еще показывает www.client.com, но все прозрачно работает на client.app.com
Конечно, вы захотите самостоятельно подтвердить приведенное ниже, ознакомившись с документацией apache, но я могу придумать два способа сделать это:
UseCanonicalName Off
с участием ServerAlias
внутри каждого VirtualHost
запись:
UseCanonicalName Off
<VirtualHost *:80>
ServerName www.client.com
ServerAlias client.app.com
DocumentRoot /www/client
</VirtualHost>
Используйте несколько 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 по теме.