Как разрешить пользователю использовать собственное доменное имя для размещенной службы?

Я работаю над веб-приложением ASP.NET MVC, которое позволяет людям публиковать контент, но помимо публикации контента на удаленном сервере я хочу разрешить людям напрямую использовать свое доменное имя. Например, доменное имя пользователя TomSite.com может указывать на http://www.mywebapp.com/user/tom, но дополнительный путь также будет сопоставлен. Например, TomSite.com/path будет сопоставлен с www.mywebapp.com/user/tom/path, и это будет незаметно для посетителя Интернета. Посетитель никогда не увидит «mywebapp.com» на сайте TomSite.com.

Я думаю, что Smugmug.com предоставляет такую ​​услугу, чтобы люди могли использовать свое собственное доменное имя для портфолио фотографий. Я хочу добиться такого же результата.

Как я могу это сделать? Спасибо!


person ycseattle    schedule 27.09.2008    source источник
comment
Какую версию IIS вы используете? Решения для IIS6 и IIS7 очень разные.   -  person Portman    schedule 28.09.2008


Ответы (4)


Это требует нескольких шагов.

Сначала вам нужно выяснить, как ваши пользователи будут настраивать свой домен, чтобы иметь запись CNAME для вашего сайта. Вы можете сделать это несколькими способами, лучший из которых — образование. Партнерство с хостинг-провайдерами требует больших объемов.

В IIS это потребует от вас либо добавления каждого имени хоста вручную (однако это также может быть заархивировано с помощью сценариев), либо наличия выделенного IP-адреса только для вашего сайта.

Также необходимо, чтобы домен был связан с учетной записью. Пользователь должен добавить это самостоятельно, и вы, вероятно, добавите проверку в интерфейсе, которая подтверждает, что домен указывает на ваш сервер. Код для этого будет выглядеть так (не забудьте включить пространство имен System.Net).

if (Dns.GetHostEntry("www.user.example.com").HostName == "www.example.com")
{
    // www.user.example.com is a CNAME for www.example.com
}

В вашем проекте ASP.NET MVC вам необходимо реализовать маршруты для этой конкретной цели. Создайте собственный класс, наследующий от Route, который также учитывает домен.

person Troels Thomsen    schedule 28.09.2008

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

Таким образом, хотя www.tomsite.com может прозрачно обслуживать страницы, размещенные на www.mywebapp.com, пользователям придется приложить определенные усилия. Чтобы сделать это полностью бесшовным, вам потребуется какая-то договоренность с веб-хостингом пользователя (Похоже, у Smugmug такая договоренность с GoDaddy).

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

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

person sfg    schedule 27.09.2008

Укажите дружественное имя каждого клиента на внешний IP-адрес вашего веб-сервера.

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

Не забудьте сопоставить веб-сайт по умолчанию только с вашими дружественными именами. Если вы оставите его в неразборчивом режиме (сопоставленном с «*»), результаты будут непредсказуемыми.

Чтобы установить сопоставление заголовка хоста

Выберите Веб-сайт по умолчанию в узле Сайты. На панели Действия в правом верхнем углу щелкните Привязки..., чтобы открыть диалоговое окно Привязки сайта. Появится список привязок, вероятно, содержащий одну запись, которая говорит http * 80. Выберите это и нажмите кнопку Изменить.... Задайте для Имя хоста собственное дружественное имя.

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

person Peter Wone    schedule 27.09.2008

Просто сделайте новую запись на своем веб-сервере, установив tomsite.com прямо на свой путь mywebapp.com/user/tom/?

Смотри как псевдоним :)

Конечно, поскольку вы работаете на asp.net/windows, я думаю, вам придется углубиться в IIS, чтобы автоматизировать такие вещи. Если бы вы были на apache, вы бы добавили 3 простые строки в httpd.conf.

person SchizoDuckie    schedule 27.09.2008
comment
Итак, как насчет примера упомянутых «3 простых строк»? - person Kev; 28.09.2008
comment
‹VirtualHost tomsite.com:80› DocumentRoot /www/user/tom/ ‹/VirtualHost› в httpd.conf :) - person SchizoDuckie; 30.09.2008