Поддомены с подстановочными знаками в IIS7. Можно ли сделать их такими, как в Apache?

Можно ли настроить IIS7 для достижения той же функциональности, что и у Apache в отношении доменов с подстановочными знаками? Меня интересует маршрутизация пользователя в веб-приложении ASP.NET на основе пользователя поддомена, используемого в URL-адресе.

Что-то вроде описано здесь:

http://steinsoft.net/index.php?site=programming/articles/apachewildcarddomain

Спасибо


person GrZeCh    schedule 19.01.2009    source источник


Ответы (6)


Ответ: Нет, IIS7 (по-прежнему) не поддерживает имена узлов с подстановочными знаками (см. это). Если вы хотите обслуживать несколько доменов на одном веб-сайте, единственным обходным решением на данный момент, как не было предложено, является использование выделенного IP-адреса и выполнение этого с помощью DNS, который поддерживает подстановочные знаки.

Обновление 2013 г.

Для полноты, IIS8 еще не имеет этой функции.

Обновление 2016 г.

Наконец, IIS 10 в Windows 2016 поддерживает поддомены с подстановочными знаками.

person Daniel Liuzzi    schedule 14.04.2009
comment
Я пытаюсь подумать, есть ли способ использовать средство перезаписи URL-адресов, чтобы заставить это работать ... надо подумать. - person Brady Moritz; 16.02.2011
comment
Проблема в том, что для этих правил перезаписи нужен веб-сайт; веб-сайту нужны привязки, чтобы ожить; и IIS не поддерживает привязки с подстановочными знаками, так что мы вернулись к исходной точке. Вы определенно можете создать веб-сайт, имитирующий обслуживание нескольких веб-сайтов (например, с правилами перезаписи, как вы упомянули), но для этого вам нужен выделенный IP-адрес. В этом случае DNS, по сути, компенсирует недостатки IIS. - person Daniel Liuzzi; 17.02.2011
comment
@DanielLiuzzi На самом деле, нет. Подумайте о правилах маршрутизации ARR, которые направляют все на ферму серверов. Они настроены как правила перезаписи на сервере, и я начинаю думать, что это может сработать. Только что сам столкнулся с этим требованием. Скоро будет отзыв.. - person Rudi Visser; 20.05.2014
comment
IIS в Windows 10 поддерживает имена хостов с подстановочными знаками. - person Ranjith Ramachandra; 11.10.2014
comment
@RanjithRamachandra У вас есть ссылка, чтобы поддержать это? Я нашел только это. - person Michael; 29.10.2014
comment
На самом деле да. Но вы должны установить расширения URL Rewrite и Маршрутизация запросов приложений для IIS. - person Andre Figueiredo; 24.04.2015
comment
IIS 10 теперь поддерживает подстановочные знаки — docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/ - person C. Ridley; 18.07.2017
comment
@RudiVisser Я удивлен, что вы не ответили, но я опубликовал свой собственный ответ. - person Lex Li; 18.09.2018
comment
@AndreFigueiredo URL Rewrite и ARR не нужны, если вы просто используете встроенную поддержку имен хостов IIS 10 с подстановочными знаками. Но да, если для более старых выпусков IIS и вы хотите эмулировать то же поведение, эти два могут очень помочь. - person Lex Li; 18.09.2018
comment
@LexLi Вы понимаете, что мой комментарий старше даты выпуска IIS 10, верно? - person Andre Figueiredo; 18.09.2018
comment
@AndreFigueiredo Предварительная сборка Windows 10/IIS 10 явно была доступна в апреле 2015 года, так что вы должны... не были на 100 % даже в то время. - person Lex Li; 18.09.2018
comment
@LexLi В то время я не ясно выразился, но я обращался к комментарию Дэниела Лиуцци. IIS не поддерживает привязки с подстановочными знаками, а не Ранджит-Майкл. Я даже не буду принимать во внимание неофициальный выпуск в то время, потому что этот вопрос касается IIS7;) - person Andre Figueiredo; 18.09.2018

Поддерживает ли IIS заголовок узла с подстановочными знаками? Могу ли я захватить и перенаправить *.mydomain.com на один веб-сайт?

Ответ Да/Нет. Да, потому что вы можете перенаправить *.mydomain.com на один веб-сайт. Нет, потому что все дело в DNS, а не в IIS.

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

Следующий шаг — убедиться, что ваше разрешение имени работает для запроса с подстановочными знаками, и ответьте с правильным IP-адресом. Если вы используете службу Microsoft DNS, она не позволит вам создать запись '*' A (при условии, что вы уже создали доменную зону в DNS MMC), вам необходимо сделать следующее:

  1. Перейдите к %windir%\system32\dns\
  2. Найдите файл зоны. Например,
    mydomain.com.dns, откройте его с помощью Блокнота.
  3. Добавьте запись. Например,
    * A IP.IP.IP.IP
  4. Сохраните файл данных зоны
  5. Перезагрузите данные зоны в 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/, вы должны получить ту же веб-страницу, которую вы настроили.

Источник

person notandy    schedule 06.03.2009

Вы не можете создать запись с подстановочным знаком (*) в DNS Microsoft, но вы можете создать подстановочный знак CNAME. Если все, что вы пытаетесь сделать, это направить все поддомены на определенный IP-адрес, это сработает. Например, если у вас есть запись A для www.mydomain.com, вы можете добавить запись CNAME для *.mydomain.com и указать ее на www.mydomain.com. Имя хоста в заголовке запроса по-прежнему будет субдоменом, поэтому ваше веб-приложение должно иметь возможность перехватить его и обработать, если хотите.

person Centijo    schedule 23.05.2012
comment
Чисто и просто. Любить это! - person Frank Fu; 18.11.2017

Вы можете использовать IIS, если используете установщик веб-платформы (http://www.microsoft.com/web/downloads/platform.aspx) и установите модуль «Перезапись URL». Если вы добавите запись «A», например «*.example.com», это позволит отправить все поддомены на ваш сервер IIS. На сервере IIS вы просто добавляете правило перезаписи URL-адреса к веб-сайту по умолчанию, чтобы делать все, что пожелаете, например, перенаправлять на другой URL-адрес. Когда пользователь вводит, скажем, «xyz.example.com», вы можете перенаправить на «example.com» и указать все неизвестные поддомены на корневой домен. Шаги:

  1. Установите установщик веб-платформы: http://www.microsoft.com/web/downloads/platform.aspx

    Запустите его, найдите «URL Rewrite» и установите его.

  2. Перейдите на веб-сайт по умолчанию и откройте «URL Rewrite».

  3. Нажмите «Добавить правило (я)» справа.

  4. Назовите правило и установите следующее:

    Запрошенный URL: соответствует шаблону

    Использование: Регулярные выражения

    Шаблон: (.*)

    Логическая группировка: Сопоставить все

  5. Добавьте новое условие (нажмите кнопку "Добавить...") и установите:

    Ввод условия: {CACHE_URL}

    Проверьте, соответствует ли входная строка шаблону.

    Шаблон (при необходимости измените): (http|https)://(.*?)\.rootdomain\.tld

    Нажмите [ОК].

  6. Теперь прокрутите вниз до действия и установите:

    Тип действия: перенаправление

    URL-адрес перенаправления (при необходимости измените): {C:1}://rootdomain.tld{R:0}

"{C:#}" и "{R:#}" поступают из тестовых окон, когда вы нажимаете кнопки "Тестовый шаблон" рядом с записями шаблона регулярного выражения. Вы можете сопоставить часть значения сервера и повторно использовать его позже.

Кроме того, вы можете проверить этот совет по передаче HTTP/HTTPS в URL-адресе («{C:1}» на шаге 6 выше): http://weblogs.asp.net/owscott/url-rewrite-protocol-http-https-in-the-action

person James Wilkins    schedule 14.08.2014
comment
Перенаправление, вообще говоря, не идеально, так как оно изменяет фактический URL-адрес, отображаемый в браузерах. Поддержка имен хостов с подстановочными знаками вообще не меняет URL-адреса, поэтому правильное решение должно использовать переписывание вместо перенаправления. Я просто публикую свой ответ в качестве альтернативы. - person Lex Li; 18.09.2018

Обновление 2: ссылка не работает, обновите до IIS 10, теперь он поддерживает подстановочные знаки.

ОБНОВЛЕНИЕ: Это работает какое-то время, через некоторое время меня засыпало множеством запросов. Я бы не рекомендовал этот метод.

Убедитесь, что ваши записи DNS настроены правильно (запись CNAME *->@), и все будет работать безупречно. Проверено с несколькими доменами.

Ссылка не работает, теперь используется http://pzxc.com/apache-style-wildcard-hostname-rewrite-rules-in-iis

person Damon Earl    schedule 22.10.2014
comment
Обновите до IIS 10, он поддерживает подстановочные знаки. - person Damon Earl; 22.07.2017

Для пользователей, которые не могут выполнить обновление до IIS 10+, несложно включить поддержку имен хостов с подстановочными знаками через обратный прокси-сервер.

Пример HTTP показан ниже, в то время как другая настройка — это всего лишь несколько шагов.

  1. Создайте универсальный сайт, который привязывается к *:80 и не имеет имени хоста.
  2. Создайте первый сайт, который привязывается к *:8091 и не имеет имени хоста.
  3. Создайте второй сайт, который привязывается к *:8092 и не имеет имени хоста.
  4. Проверьте оба сайта и двигайтесь дальше.
  5. Установите модуль ARR и URL Rewrite.
  6. Создайте правила перезаписи на универсальном сайте для отправки запросов на два сайта,

    <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,

    <system.webServer>
        <proxy enabled="true" />
    </system.webServer>

Имя узла подстановочного знака IIS 10 проще, а также имеет лучшую производительность, потому что ARR имеет свои накладные расходы (но, вообще говоря, незначительные).

person Lex Li    schedule 18.09.2018