Пользовательский URL-адрес/домен (псевдоним CNAME?)


Я создаю приложение в стеке LAMP и хочу предоставить пользователю возможность использовать свой собственный домен вместо поддомена моего сайта. например.

Вместо: http://some_user.mysite.com

Они будут использовать: http://store.some_user.com/

Я знаю, что есть несколько компаний, которые предоставляют это, используя записи CNAME. (http://help.bigcartel.com/articles/14-using-a-custom-domain ) однако я не уверен, как они добиваются этого от начала до конца.

Мои вопросы таковы:

  1. Как называется этот процесс? (Так что я могу исследовать это дальше, если потребуется)

  2. Что мне нужно сделать, чтобы обеспечить это? т. е. Что мне нужно сделать на стороне DNS, apache и php, чтобы это заработало?

Мы будем очень признательны за любые советы, ссылки или фрагменты кода.

Спасибо


ОБНОВЛЕНИЕ

До сих пор мне удавалось настроить DNS с подстановочными знаками запись, однако у меня все еще возникают проблемы с разрешением записи CNAME в другом домене. например.

Http://store.weareunified.com / -> http://weareunified .joshstuart.com.au/

Weareunified.com ( это хост тестового пользователя ) DNS

weareunified.com. A 111.67.3.227
store CNAME weareunified.joshstuart.com.au.

Joshstuart.com.au ( Это основной хост приложения ) DNS

joshstuart.com.au. A 111.67.3.227
* CNAME joshstuart.com.au.
Author: User123342234, 2011-02-15

5 answers

Я настроил это с помощью лампы, и это работает очень хорошо. Вот как я это сделал:

  1. Целевой сервер с моим приложением на нем находится в обычном домене записи (суб). Так что в вашем случае я предполагаю, что у вас есть приложение, работающее на joshstuart.com.au.
  2. Клиенту необходимо изменить свою запись DNS на store.weareunified.com к CNAME к joshstuart.com.au .
  3. Сервер Apache имеет виртуальный хост без спецификации домена (в моем случай), просто <VirtualHost *:80>

Вот и все. В настоящее время существует более 70 доменов, которые относятся к основному домену приложения, и каждый из них обслуживает свой отдельный сайт по мере необходимости (без перенаправления и т. Д.).

 7
Author: Berklee, 2011-03-09 11:03:41

На самом деле, вам не нужно ничего делать.

Вашим пользователям необходимо, чтобы их DNS-провайдер добавил запись CNAME, которая в основном отображает http://app.some_user.com / до http://some_user.app.com.

Любой DNS-клиент, который ищет http://app.some_user.com / сказано искать http://some_user.app.com вместо этого, и поэтому это проблема DNS/клиента, а не проблема сервера.

Amazon рекомендует именно этот метод для пользователей EC2 серверы.

Пожалуйста, обратите внимание, что записи CNAME имеют ограничение, они не могут быть назначены корню домена - ваши пользователи не могут назначать http://some_user.com /, только http://app.some_user.com / как имя CNAME.

 5
Author: Rami C, 2011-02-15 11:24:47

У меня есть нечто подобное, что я сделал с api2 cpanel.

По сути, пользователь указывает свой домен на мой dns, и я использую api, чтобы припарковать его домен на своем.

Я храню домен каждого пользователя в базе данных.

При загрузке страницы я извлекаю http_host и сравниваю его со своей базой данных, чтобы узнать, существует ли домен. Затем я загружаю страницу на основе настроек пользователей (я обслуживаю все страницы из одного и того же сценария) и записей базы данных.

Чтобы уменьшить нагрузку на базу данных, я сохраните информацию в сеансе, идентифицирующем хост. Затем я могу проверять это при каждой последующей загрузке вместо того, чтобы каждый раз проверять базу данных.

 1
Author: frostymarvelous, 2011-03-07 14:21:52

Другая возможность состоит в том, чтобы фактически быть DNS-хостом пользователя и обрабатывать все записи. Для этого вы можете получить решение с открытым исходным кодом. (Но вам может потребоваться иметь два DNS-сервера в разных подсетях).

 0
Author: vbence, 2011-03-09 10:45:31

Здесь есть несколько разных частей - настройка записей DNS, а затем получение ответа Apache на запрос.

Правильно ли вы настроили CNAME для клиента? Обратите внимание, что вы не можете настроить CNAME на weareunited.com, он должен быть включен store.weareunited.com, или какое-либо другое имя хоста, которое не является корневым доменом.

Похоже, вы, возможно, не понимаете, как работает CNAME. Чрезмерно упрощенная версия, когда пользователь запрашивает store.weareunited.com, их локальный сервер имен (например, сервер имен, который находится у провайдера конечного пользователя. Для меня на Comcast это обычно Comcast NS в Бивертоне, или. Это при условии, что локальный сервер имен еще не разрешил имя хоста и не имеет его в кэше) запросит корневые серверы имен, чтобы определить, кто отвечает за домен. Затем локальный сервер имен запросит сервер доменных имен, чтобы получить запись. Запись может быть записью A, которая является IP-адресом, или CNAME, указывающим на другое имя хоста.

Когда local namesever получит CNAME, он снова выполнит этот процесс, чтобы получить запись A. Как только он, наконец, получит запись A с IP-адресом, он вернет IP-адрес браузеру конечного пользователя, и веб-браузер отправит запрос на IP-адрес.

Конечным результатом является то, что веб-браузер получает IP-адрес, а затем делает запрос на этот IP-адрес, используя исходное имя хоста в качестве заголовка хоста - store.weareunited.com . Так что Apache должен быть настройка для получения запросов на имя хоста store.weareunited.com .

PHP не будет волновать, какое имя хоста, если вы не проверяете переменные среды, такие как $_SERVER...

Вы можете заставить своих клиентов настроить CNAME для joshstuart.com.au . Вы, конечно, могли бы создать дополнительные имена хостов, такие как weareunited.joshstuart.com.au , или сделайте подстановочный знак, а затем попросите ваших клиентов установить целевое значение CNAME для этого уникального имени хоста, но зачем беспокоиться? Я бы просто сказал:

store.weareunited.com.  3600 IN CNAME   joshstuart.com.au.

До тех пор, пока joshstuart.com.au затем передайте IP-адрес вашему веб-серверу, CNAME будет работать. Как я уже упоминал выше, Apache увидит поступающий запрос на store.weareunited.com , поэтому вам либо нужно настроить виртуальный хост для этого имени хоста, либо создать общий vhost, как упоминает Беркли (хотя я не уверен, какие директивы apache вы бы использовали, чтобы гарантировать, что запрос затем сопоставляется с соответствующими файлами для домена...).

 0
Author: robertlbolton, 2011-03-10 07:35:27