Использование пользовательских доменов с IIS Express - PullRequest
288 голосов
/ 17 января 2011

Традиционно я использую пользовательские домены с моим сервером разработки localhost. Что-то вроде:

dev.example.com
dev.api.example.com

Это дало мне большую гибкость при работе с внешними API, такими как Facebook. В прошлом это прекрасно работало со встроенным Visual Studio Development Server, потому что все, что мне нужно было сделать, это добавить CNAME в эти записи DNS, указывающие на 127.0.0.1.

Однако я не смог заставить это работать с IIS Express. Кажется, все, что я пробовал, провалилось. Я даже добавил правильную конфигурацию XML в файл applicationHost.config для IIS Express, но, похоже, он не распознает записи как действительные, как при истинной установке IIS.

<binding protocol="http" bindingInformation="*:1288:dev.example.com" />

Всякий раз, когда я вхожу в эту строку и пытаюсь запросить http://dev.example.com:1288, я получаю следующее сообщение:

Неверный запрос - Неверное имя хоста

Кто-нибудь знает, если я упускаю что-то очевидное? Или команде IIS Express действительно не хватило предвидения, чтобы увидеть этот тип использования?

Ответы [ 12 ]

351 голосов
/ 04 марта 2011

Это то, что сработало для меня (Обновлено для VS 2013, см. Историю изменений за 2010 г., для VS 2015 см. Это: https://stackoverflow.com/a/32744234/218971):

  1. Щелкните правой кнопкой мыши свой вебПроект приложения ▶ PropertiesWeb, затем настройте раздел Servers следующим образом:
    • Выберите IIS Express ▼ из раскрывающегося списка
    • URL проекта:http://localhost
    • Переопределить корневой URL-адрес приложения: http://dev.example.com
    • Нажмите Создать виртуальный каталог (если вы получили ошибку, вам может потребоваться отключить IIS 5/6 /7/8, измените IIS Default Site на что угодно, кроме порта :80, убедитесь, что Skype не использует порт 80 и т. Д.)
  2. Опционально:Установите Start URL на http://dev.example.com
  3. Открыть %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (Windows XP, Vista и 7) и отредактируйте определение сайта в блоке конфигурации <sites> так, чтобы оно соответствовалоследующее:

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation=":80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>
    
  4. Если работает MVC: убедитесь, что для applicationPool установлен один из параметров «Интегрировано» (например, «Clr2IntegratedAppPool»).

  5. Откройте hosts файл и добавьте строку 127.0.0.1 dev.example.com.
  6. ► Запустите ваше приложение!

Некоторые великиесовет из комментариев:

  • Возможно, вам понадобится запустить Visual Studio от имени администратора.
  • Если вы хотите, чтобы другие разработчики увидели ваш IIS, запустите netsh http add urlacl url=http://dev.example.com:80/ user=everyone
  • Если вы хотите разрешить сайт для всех хостов, установите bindingInformation="*:80:".Используйте любой порт, который вы хотите, 80 просто удобно.
142 голосов
/ 23 сентября 2015

Для Visual Studio 2015 применимы действия, описанные выше, но файл applicationhost.config находится в новом месте.В вашей папке «Solution» следуйте по пути, это сбивает с толку, если вы обновились и на вашей машине будет ДВУХ версий applicationhost.config.

\.vs\config

В этой папке вы увидите ваш applicationhost.config file

В качестве альтернативы вы можете просто найти в папке вашего решения файл .config и найти его таким образом.

Я лично использовал следующую конфигурацию:

enter image description here

Со следующим в моем файле hosts:

127.0.0.1       jam.net
127.0.0.1       www.jam.net

И следующее в моем файле applicationhost.config:

<site name="JBN.Site" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Dev\Jam\shoppingcart\src\Web\JBN.Site" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:49707:" />
            <binding protocol="http" bindingInformation="*:49707:localhost" /> 
    </bindings>
</site>

Не забудьте запустить свой экземпляр Visual Studio 2015 от имени администратора! Если вы не хотите делать это каждый раз, я рекомендую следующее:

Как запустить Visual Studio от имени администраторапо умолчанию

Надеюсь, это кому-нибудь поможет, у меня возникли проблемы при обновлении до Visual Studio 2015, и я понял, что ни одна из моих конфигураций не была перенесена.

44 голосов
/ 20 февраля 2013

При использовании Visual Studio 2012 с IIS Express при изменении существующая привязка не работает постоянно. (Это может работать до тех пор, пока вы не закроете VS, но после этого все будет действительно запутано.)

Ключ сохраняет существующую привязку localhost и добавляет новую привязку после нее.

Если вы не работаете в качестве администратора, вам также нужно будет запустить netsh add urlacl (чтобы предоставить себе права на запуск сайта, не являющегося локальным, как обычного пользователя).

Если вы хотите разрешить любое имя хоста, полный процесс выглядит следующим образом:

  1. Создайте свое веб-приложение и выясните, какой порт оно использует (см. Свойства проекта, вкладка «Веб», URL проекта).
  2. В командной строке администратора выполните следующие команды (заменив номер порта на номер порта, который вы определили в # 1):

    netsh http add urlacl url="http://*:portnumber/" user=everyone
    netsh http add urlacl url="http://localhost:portnumber/" user=everyone
    

Вы также можете использовать свое имя пользователя (ДОМЕН \ ПОЛЬЗОВАТЕЛЬ) вместо всех для повышения безопасности.

  1. Откройте applicationhost.config (обычно в папке Мои документы \ IIS Express \ config) и найдите элемент с номером вашего порта.
  2. Добавьте еще одну привязку с нужным именем хоста (в данном случае *). Например:

    <site name="MvcApplication1" id="2">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\sites\MvcApplication1" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:12853:localhost" />
            <binding protocol="http" bindingInformation="*:12853:*" />
        </bindings>
    </site>
    

Обратите внимание, что если вы хотите открыть все имена хостов (*), вам понадобятся две команды netsh (одна для * и одна для localhost). Если вы хотите открыть только определенное имя хоста, вам не нужна вторая команда netsh (localhost); достаточно только одного с вашим конкретным именем хоста.

24 голосов
/ 18 января 2011

Неверное имя хоста указывает, что фактический сайт, который вы настроили в файле конфигурации IIS Express (скорее всего), не работает.IIS Express не имеет такой модели процессов, как IIS.


Для запуска вашего сайта его нужно будет явно запустить (либо открыв и получив доступ из веб-матрицы, либо из командной строки, вызвав iisexpress.exe (из каталога установки) с параметром / site.


Как правило, шаги, позволяющие использовать полные DNS-имена для локального доступа: Давайте используем ваш пример DNS-имени dev.example.com

  1. editФайл% windows% \ system32 \ drivers \ etc \ hosts для сопоставления dev.example.com с 127.0.0.1 (требуются права администратора). Если вы управляете DNS-сервером (как в случае с Ником), тогда достаточно записи DNS, так как этот шагне требуется.
  2. Если вы подключаетесь к Интернету через прокси-сервер, убедитесь, что dev.example.com не будет перенаправлен на прокси-сервер (вы должны добавить в список исключений в своем браузере (для IE это будет Tools)/ Свойства обозревателя / Подключения / Параметры локальной сети, затем перейдите на Прокси-сервер / Дополнительно и добавьте dev.example.com в список исключений.
  3. Настройка привязки IIS Expressдля вашего сайта (например: Site1), чтобы включить dev.example.com.Административная привилегия будет необходима для использования привязки.В качестве альтернативы однократное резервирование URL-адреса можно выполнить с помощью http.sys, используя

    netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name>

  4. start iisexpress /site:Site1 или открыть Site1 в WebMatrix

19 голосов
/ 31 июля 2012

На моей установке WebMatrix IIS Express изменение с "*:80:localhost" на "*:80:custom.hostname" не работало («Неверное имя хоста», даже при правильном отображении etc \ hosts), но "*:80:" сделало работа- -и без каких-либо дополнительных шагов, требуемых другими ответами здесь. Обратите внимание, что "*:80:*" этого не сделает; пропустите вторую звездочку.

8 голосов
/ 23 января 2013

Я пытался интегрировать общедоступный IP-адрес в свой рабочий процесс, и эти ответы не помогли (мне нравится использовать IDE в качестве IDE). Но вышесказанное приводит меня к решению (примерно через 2 часа после того, как я ударился головой о стену, чтобы это интегрировалось с Visual Studio 2012 / Windows 8), вот что мне помогло.

applicationhost.config , сгенерированный VisualStudio в C:\Users\usr\Documents\IISExpress\config

    <site name="MySite" id="1">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\Users\usr\Documents\Visual Studio 2012\Projects\MySite" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:8081:localhost" />
            <binding protocol="http" bindingInformation="*:8082:localhost" />
            <binding protocol="http" bindingInformation="*:8083:192.168.2.102" />
        </bindings>
    </site>
  • Установить IISExpress для запуска как Administrator, чтобы он мог связываться с внешними адресами (не локальным хостом)
  • Запустите Visual Stuio от имени Administrator, чтобы он мог запустить процесс от имени администратора, разрешив связывание.

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

Очевидно, это функция безопасности, которую я бы хотел отключить.

5 голосов
/ 05 августа 2016

Как и Джесса Флинт выше, я не хотел вручную редактировать .vs \ config \ applicationhost.config , потому что я хотел, чтобы изменения сохранялись в системе контроля версий.Я также не хотел иметь отдельный командный файл.Я использую VS 2015 .

Свойства проекта → События сборки → Командная строка события перед сборкой: Screenshot of project properties


::The following configures IIS Express to bind to any address at the specified port

::remove binding if it already exists
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /-bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

::add the binding
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /+bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

Просто убедитесь, что вы изменили номер порта на желаемый порт.

5 голосов
/ 01 января 2015

Правильный ответ действителен .. и эта информация мне очень помогла. Я знаю, что эта тема обсуждалась ранее, но я хотел добавить некоторые дополнительные материалы. Люди говорят, что вы должны «вручную отредактировать» файл application.config в каталоге Users IISExpress / Config. Это было большой проблемой для меня, потому что я хотел распространить конфигурацию через систему управления исходным кодом среди различных разработчиков.

Я обнаружил, что вы можете автоматизировать обновление этого файла с помощью программы "C: \ Program Files \ IIS Express \ appcmd.exe". Потребовалось некоторое время, чтобы выяснить параметры контроля, но я поделюсь своими выводами здесь. По сути, вы можете создать файл .bat, который запускает и команду NETSH, и файл APPCMD.EXE (и, возможно, замените файл хоста, если хотите), чтобы упростить настройку заголовка хоста с помощью IIS Express.

Ваш установочный файл bat будет выглядеть примерно так:

netsh http add urlacl url=http://yourcustomdomain.com:80/ user=everyone 

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /+bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

Я также создам bat-файл «Uninstall», который очистит эти привязки .. (потому что часто я просто фальсифицирую DNS, чтобы я мог работать с кодом, чувствительным к имени хоста)

netsh http delete urlacl url=http://yourcustomdomain.com:80/

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /-bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

Надеюсь, эта информация кому-то пригодится. Мне понадобилось немного времени, чтобы раскрыть ее.

4 голосов
/ 18 февраля 2011

Следуя совету Jaro, я смог заставить это работать под Windows XP и IIS Express (установленными через Web Matrix) с небольшой модификацией и не ограничивался только localhost. Это просто вопрос правильной установки привязок.

  1. Используйте WebMatrix для создания нового сайта из папки в корне вашего веб-приложения.
  2. Закрыть WebMatrix.
  3. Открыть %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (пути Windows XP. Vista и 7 будут похожи) и отредактировать определение сайта в блоке конфигурации <sites>, чтобы оно соответствовало следующим параметрам:

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation="*:80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>

Если запущен MVC, оставьте для applicationPool один из «встроенных» параметров.

3 голосов
/ 31 августа 2016

Решение Дэвида хорошо. Но я обнаружил, что <script>alert(document.domain);</script> на странице все еще выдает предупреждение «localhost», поскольку URL-адрес проекта по-прежнему является localhost, даже если он был переопределен с помощью http://dev.example.com. Другая проблема, с которой я сталкиваюсь, заключается в том, что она предупреждает меня, что порт 80 уже используется, даже если я отключил Skype, используя номер порта 80, как рекомендовано Дэвидом Мердоком. Итак, я нашел другое решение, которое намного проще:

  1. Запустите Блокнот как администратор и откройте C: \ Windows \ System32 \ drivers \ etc \ hosts, добавьте 127.0.0.1 mydomain и сохраните файл;
  2. Откройте веб-проект с помощью Visual Studio 2013 (Примечание: должен также запускаться от имени администратора), щелкните правой кнопкой мыши проект -> Свойства -> Интернет (допустим, что URL-адрес проекта в разделе «IIS Express» имеет значение http://localhost:33333/ ), затем измените его с http://localhost:33333/ на http://mydomain:333333/ Примечание. После этого изменения не следует ни нажимать кнопку «Создать виртуальный каталог» справа от поля «URL-адрес проекта», ни нажимать кнопку «Сохранить» в Visual Studio, поскольку они не будут выполнены. Вы можете сохранить настройки после следующего шага 3.
  3. Откройте% USERPROFILE% \ My Documents \ IISExpress \ config \ applicationhost.config, найдите «33333: localhost», затем обновите его до «33333: mydomain» и сохраните файл.
  4. Сохраните настройки, как указано в шаге 2.
  5. Щелкните правой кнопкой мыши веб-страницу в вашей визуальной студии и выберите «Просмотр в браузере». Теперь страница будет открыта в http://mydomain:333333/, и <script>alert(document.domain);</script> на странице выдаст предупреждение «mydomain».

Примечание: Предполагается, что номер порта, указанный выше, равен 33333. Вам необходимо изменить его на номер порта, установленный вашей Visual Studio.

Сообщение отредактировано: сегодня я попытался с другим доменным именем и получил следующую ошибку: Невозможно запустить веб-сервер IIS Express. Не удалось зарегистрировать URL ... Доступ запрещен. (0x80070005) . Я выхожу из IIS Express, щелкнув правой кнопкой мыши значок IIS Express в правом углу на панели задач Windows, а затем перезапустите Visual Studio в качестве администратора, и проблема исчезнет.

...