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

StackOverflow https://stackoverflow.com/questions/458757

Вопрос

Возможно ли настроить 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), вам необходимо выполнить следующее:

  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 /, вы должны получить ту же веб-страницу, которую вы настроили.

Источник

Вы не можете создать подстановочный знак (*) записи 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" и указать все неизвестные поддомены на корневой домен.Эти шаги заключаются в:

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

    Запустите его, найдите "Перезапись URL" и установите.

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

  3. Нажмите "Добавить правило (ы)" в крайнем правом углу.

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

    Запрошенный URL-АДРЕС:Соответствует Шаблону

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

    Узор:(.*)

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

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

    Ввод условия:{CACHE_URL}КЭШИРОВАНИЕ

    Проверьте, есть ли входная строка:Соответствует Шаблону

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

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

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

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

    Перенаправить 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 приведен ниже, в то время как другая настройка - это всего лишь еще несколько шагов.

  1. Создайте универсальный сайт, который привязывается к *: 80 и не имеет имени хоста.
  2. Создайте первый сайт, который привязывается к *: 8091 и без имени хоста.
  3. Создайте второй сайт, который привязывается к *: 8092 и без имени хоста.
  4. Протестируйте оба сайта и двигайтесь дальше.
  5. Установите модуль ARR и перезаписи URL.
  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 proxy,

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top