Пользовательский URL / домен (псевдоним CNAME?) - PullRequest
6 голосов
/ 15 февраля 2011

Я создаю приложение в стеке 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 ( Thisявляется основным хостом приложения ) DNS

joshstuart.com.au. A 111.67.3.227
* CNAME joshstuart.com.au.

Ответы [ 5 ]

7 голосов
/ 09 марта 2011

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

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

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

5 голосов
/ 15 февраля 2011

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

Вашим пользователям нужно, чтобы их 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.

1 голос
/ 07 марта 2011

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

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

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

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

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

0 голосов
/ 10 марта 2011

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

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

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

Когда локальный сервер имен получает 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 голосов
/ 09 марта 2011

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

...