Поддомены с подстановочными знаками в IIS7.Можно ли сделать их такими, как в Apache?
Вопрос
Возможно ли настроить IIS7 для достижения той же функциональности, что и Apache в отношении доменов с подстановочными знаками?Меня интересует маршрутизация пользователя в ASP.NET веб-приложение, основанное на пользователе поддомена, используемом в URL.
Что-то подобное описано здесь:
http://steinsoft.net/index.php?site=programming/articles/apachewildcarddomain
Спасибо
Решение
Ответ отрицательный, IIS7 (по-прежнему) не поддерживает подстановочные имена хостов (см. это).Если вы хотите обслуживать несколько доменов на одном веб-сайте, единственным обходным решением на данный момент, как и предлагал нотанди, является использование выделенного IP-адреса и выполнение этого с помощью DNS, который поддерживает подстановочные знаки.
Обновление 2013 года
Для полноты картины, в IIS8 также пока нет этой функции.
Обновление 2016 года
Наконец, IIS 10 в Windows 2016 поддерживает поддомены с подстановочными знаками.
Другие советы
Поддерживает ли IIS заголовок узла с подстановочными знаками?Могу ли я захватить и перенаправить *.mydomain.com на один веб-сайт?
Ответ - Да / Нет.Да, потому что вы можете перенаправлять *.mydomain.com на один веб-сайт.Нет, потому что волшебство заключается в DNS, а не IIS.
Вот как вы это делаете:
В IIS MMC
настройте веб-сайт без заголовка host
, затем назначьте IP-адрес
сайту.(если у вас есть один IP-адрес
в поле, тогда вы можете пропустить это).При этом веб-сайт будет привязан к
определенному IP и будет прослушивать все
HTTP-запросы, отправляемые на IP, и вы
готово :)
Следующий шаг - убедиться, что ваше имя разрешение работает для подстановочного знака запрашивайте и отвечайте с правильным IP адресом.Если вы используете службу Microsoft DNS , она не позволит вам создать запись '*' A (при условии, что вы уже создали доменную зону в DNS MMC), вам необходимо выполнить следующее:
- Перейдите к
%windir%\system32\dns\
- Найдите файл зоны.Например.
mydomain.com.dns, откройте его с помощью Блокнота - Добавьте запись.Например.
* A IP.IP.IP.IP
- Сохраните файл данных зоны
- Перезагрузите данные зоны в DNS MMC.
Обратите внимание, что при этом все * будут отвечать на IP-адрес, который вы настроили ранее.Например.abc.mydomain.com , www.mydomain.com, K2k.mydomain.com и т.д.
Чтобы убедиться, что это работает, попробуйте выполнить ping
утилита ping (insert anything here).mydomain.com
и вы должны
получать ответы от IP.IP.IP.IP
Затем попробуйте просмотреть http:// (вставьте что-нибудь здесь).mydomain.com /, вы должны получить ту же веб-страницу, которую вы настроили.
Вы не можете создать подстановочный знак (*) записи A в DNS Microsoft, но вы может создайте подстановочный знак CNAME
.Если все, что вы пытаетесь сделать, это направить все поддомены на определенный IP, это сработает.Например, если у вас есть запись A для www.mydomain.com
, вы могли бы добавить CNAME
запись для *.mydomain.com
и направьте это на www.mydomain.com
.Имя хоста в заголовке запроса по-прежнему будет поддоменом, поэтому ваше веб-приложение должно иметь возможность перехватывать его и обрабатывать, если вы хотите.
Вы можете использовать IIS, если используете установщик веб-платформы (http://www.microsoft.com/web/downloads/platform.aspx) и установите модуль "Перезапись URL".Если вы добавите запись "A", например "*.example.com", это позволит отправлять все поддомены на ваш сервер IIS.На сервере IIS вы просто добавляете правило перезаписи URL-адреса на веб-сайт по умолчанию, чтобы делать все, что пожелаете, например перенаправлять на другой URL.Когда пользователь вводит, скажем, "xyz.example.com", вы могли бы перенаправить на "example.com" и указать все неизвестные поддомены на корневой домен.Эти шаги заключаются в:
Установить установщик веб-платформы: http://www.microsoft.com/web/downloads/platform.aspx
Запустите его, найдите "Перезапись URL" и установите.
Перейдите на веб-сайт по умолчанию и откройте "Переписать URL".
Нажмите "Добавить правило (ы)" в крайнем правом углу.
Назовите правило и задайте следующее:
Запрошенный URL-АДРЕС:Соответствует Шаблону
Используя:Регулярные выражения
Узор:(.*)
Логическая Группировка:Соответствовать Всем
Добавьте новое условие (нажмите кнопку "Добавить..") и установите:
Ввод условия:{CACHE_URL}КЭШИРОВАНИЕ
Проверьте, есть ли входная строка:Соответствует Шаблону
Шаблон (изменяйте по мере необходимости):(http|https)://(.*?)\. корневой домен \.tld
Нажмите [ОК].
Теперь прокрутите вниз до пункта действие и установите:
Тип действия:Перенаправление
Перенаправить URL (изменить по мере необходимости):{C:1}://корневой домен.tld{R:0}
"{C:#}" и "{R:#}" появляются в тестовых окнах, когда вы нажимаете кнопки "Тестовый шаблон" рядом с записями шаблона регулярных выражений.Вы можете сопоставить часть значения сервера и повторно использовать его позже.
Кроме того, вы можете проверить этот совет при передаче HTTP / HTTPS в URL ("{C: 1}" на шаге 6 выше).: http://weblogs.asp.net/owscott/url-rewrite-protocol-http-https-in-the-action
Обновление 2:Ссылка не работает, обновитесь до IIS 10, теперь он поддерживает подстановочные знаки.
Обновить:Это работает некоторое время, через некоторое время меня стали засыпать многочисленными поступающими запросами.Я бы не рекомендовал этот метод.
Убедитесь, что ваши DNS-записи настроены правильно (запись CNAME из *->@), и она будет работать безупречно.Протестировано с несколькими доменами.
Ссылка теперь разорвана, раньше была http://pzxc.com/apache-style-wildcard-hostname-rewrite-rules-in-iis
Для пользователей, которые не могут перейти на IIS 10+, не очень сложно включить поддержку подстановочных имен хостов через обратный прокси.
Пример HTTP приведен ниже, в то время как другая настройка - это всего лишь еще несколько шагов.
- Создайте универсальный сайт, который привязывается к *: 80 и не имеет имени хоста.
- Создайте первый сайт, который привязывается к *: 8091 и без имени хоста.
- Создайте второй сайт, который привязывается к *: 8092 и без имени хоста.
- Протестируйте оба сайта и двигайтесь дальше.
- Установите модуль ARR и перезаписи URL.
Создайте правила перезаписи на универсальном сайте для отправки запросов на два сайта,
<system.webServer> <rewrite> <rules> <rule name="site1" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^(.*).site1.com$" /> </conditions> <action type="Rewrite" url="http://localhost:8091/{R:0}" /> </rule> <rule name="site2" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^(.*).site2.com$" /> </conditions> <action type="Rewrite" url="http://localhost:8092/{R:0}" /> </rule> </rules> </rewrite> </system.webServer>
Обратите внимание, что на уровне сервера должен быть включен режим ARR proxy,
<system.webServer>
<proxy enabled="true" />
</system.webServer>
Подстановочное имя хоста IIS 10 проще, а также обладает лучшей производительностью, поскольку ARR имеет свои накладные расходы (но, вообще говоря, незначительные).