Использование пользовательских доменов с помощью IIS Express
Традиционно я использую пользовательские домены с моим сервером разработки 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 не хватало предвидения, чтобы увидеть этот тип использования?
Ответы
Ответ 1
Это то, что сработало для меня (обновлено для VS 2013, см. историю изменений в 2010 году для VS 2015): fooobar.com/questions/26451/...):
- Щелкните правой кнопкой мыши проект веб-приложения ▶
Properties
▶ Web
, затем настройте раздел Servers
следующим образом:
- Выберите IIS Express ▼ из раскрывающегося списка
- Project Url:
http://localhost
- Заменить корневой URL-адрес приложения:
http://dev.example.com
- Нажмите Create Virtual Directory (если вы здесь получите ошибку, вам может потребоваться отключить IIS 5/6/7/8, измените IIS
Default Site
на любой, кроме порта :80
, убедитесь, что Skype не использует порт 80 и т.д.)
- Необязательно: установите
Start URL
на http://dev.example.com
-
Откройте %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
задано одно из параметров "Интегрировано" (например, "Clr2IntegratedAppPool" ).
- Откройте
hosts
файл и добавьте строку 127.0.0.1 dev.example.com
.
- ► Start ваше приложение!
Некоторые замечательные советы от комментариев:
- Возможно, вам потребуется запустить Visual Studio в качестве администратора.
- Если вы хотите, чтобы другие разработчики видели ваш запуск IIS
netsh http add urlacl url=http://dev.example.com:80/ user=everyone
- Если вы хотите, чтобы сайт разрешался для всех хостов, установите
bindingInformation="*:80:"
. Используйте любой порт, который вам нужен, 80 просто удобно.
Ответ 2
Для Visual Studio 2015 применимы шаги, описанные выше, но файл applicationhost.config
находится в новом месте. В вашей папке "Solution" следуйте по пути, это сбивает с толку, если вы обновились, и на вашей машине будет две версии applicationhost.config
.
\.vs\config
В этой папке вы увидите ваш файл applicationhost.config
В качестве альтернативы вы можете просто найти в папке вашего решения файл .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, и я понял, что ни одна из моих конфигураций не была перенесена.
Ответ 3
При использовании Visual Studio 2012 с IIS Express изменение существующее связывание не работает постоянно. (Это может сработать до тех пор, пока вы не закроете VS, но после этого все будет запутано.)
Ключ поддерживает существующую привязку localhost и добавляет новое связывание после него.
Если вы не работаете как администратор, вам также нужно будет запустить netsh add urlacl
(чтобы дать себе разрешение на запуск не- localhost как стандартный пользователь).
Если вы хотите разрешить любое имя хоста, полный процесс выглядит следующим образом:
- Создайте свое веб-приложение и узнайте, какой порт он использует (см. свойства проекта, вкладку "Веб", "URL проекта" ).
-
В приглашении администратора запустите следующие команды (заменив номер порта номером порта, который вы указали в # 1):
netsh http add urlacl url="http://*:portnumber/" user=everyone
netsh http add urlacl url="http://localhost:portnumber/" user=everyone
Вы также можете использовать свое имя пользователя (DOMAIN\USER) вместо всех для лучшей безопасности.
- Откройте applicationhost.config(обычно в разделе Мои документы \IIS Express\config) и найдите элемент с номером вашего порта.
-
Добавьте еще одно связывание с требуемым именем хоста (в данном случае, *). Например:
<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); достаточно одного с вашим конкретным именем хоста.
Ответ 4
Недопустимое имя хоста указывает, что фактический сайт, настроенный в конфигурационном файле IIS Express (скорее всего) не работает. У IIS Express нет такой модели процесса, как IIS.
Для запуска вашего сайта его необходимо запустить явно (либо путем открытия и доступа к вебматрице, либо из командной строки, вызывающей iisexpress.exe(из него установочной директории) с параметром /site.
В общем случае шаги, позволяющие использовать полные имена DNS для локального доступа,
Позвольте использовать ваш пример DNS-имени dev.example.com
- изменить файл% windows%\system32\drivers\etc\hosts для сопоставления dev.example.com с 127.0.0.1 (требуется привилегия администратора). Если вы управляете DNS-сервером (например, в случае Nick), запись DNS достаточно, так как этот шаг не требуется.
- Если вы подключаетесь к интернету через прокси-сервер, убедитесь, что dev.example.com не будет forwared для прокси-сервера (вы должны включить в список исключений в своем браузере (для IE это будут Tools/Internet Options/Connections/Lan Settings, затем перейдите к Proxy Server/Advanced и поместите файл dev.example.com в список exeption.
-
Настройте привязку IIS Express для вашего сайта (например: Site1), чтобы включить dev.example.com. Для использования привязки потребуется административная привилегия. В качестве альтернативы, однократное резервирование URL-адресов может быть выполнено с помощью http.sys, используя
netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name>
-
запустите iisexpress /site:Site1
или откройте Site1 в WebMatrix
Ответ 5
На моем WebMatrix IIS Express установка смены с "*:80:localhost"
на "*:80:custom.hostname"
не работала ( "Bad Hostname", даже при правильных и т.д. \hosts сопоставлениях), но "*:80:"
действительно работало - и ни с одним из них дополнительные шаги, требуемые другими ответами здесь. Обратите внимание, что "*:80:*"
не будет этого делать; оставьте вторую звездочку.
Ответ 6
Я пытался интегрировать публичный 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. Я действительно надеюсь, что это поможет кому-то другому, поскольку это определенно вызывает раздражение для меня.
По-видимому, это функция безопасности, которую я бы хотел отключить.
Ответ 7
Ответ на предыдущий вопрос действителен. И эта информация мне очень помогла. Я знаю, что эта тема обсуждалась ранее, но я хотел добавить дополнительный ввод.
Люди говорят, что вы должны "вручную редактировать" файл application.config в каталоге "Пользователи IISExpress/Config". Это было большой проблемой для меня, потому что я хотел распространять конфигурацию через Source control для разных разработчиков.
Я обнаружил, что вы можете автоматизировать обновление этого файла с помощью программы "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, который очистит эти привязки.. (потому что часто раз Im просто подделывает 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']
Я надеюсь, что эта информация полезна кому-то. Мне потребовалось немного, чтобы раскрыть.
Ответ 8
Следуя совету Jaro, я смог получить эту работу под Windows XP и IIS Express (установленную через веб-матрицу) с небольшой модификацией и не ограничивался только локальным хостом. Это просто вопрос правильной настройки привязок.
Если вы используете MVC, сохраните applicationPool в одной из "Интегрированных" опций.
Ответ 9
Как и Jessa Flint выше, я не хотел вручную редактировать .vs\config\applicationhost.config, потому что я хотел, чтобы изменения сохранялись в исходном управлении. Я также не хотел иметь отдельный командный файл. Я использую VS 2015.
Свойства проекта → События сборки → Командная строка события предварительной сборки:
![Снимок экрана свойств проекта]()
::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"
Просто убедитесь, что вы изменили номер порта на нужный порт.
Ответ 10
Решение David - это хорошо. Но я обнаружил, что <script>alert(document.domain);</script>
на странице все еще предупреждает "localhost", потому что Url Project все еще является локальным хостом, даже если он был переопределен с помощью http://dev.example.com
. Другая проблема, с которой я столкнулся, заключается в том, что она предупреждает меня, что порт 80 уже используется, даже если я отключил Skype, используя номер порта 80, как рекомендовал Дэвид Мердок. Поэтому я понял другое решение, которое намного проще:
- Запустите Блокнот как администратор и откройте C:\Windows\System32\drivers\etc\hosts, добавьте 127.0.0.1 mydomain и сохраните файл;
- Откройте веб-проект с помощью Visual Studio 2013 (Примечание: также должен выполняться как администратор), щелкните правой кнопкой мыши проект → Свойства → Интернет (предположим, что URL-адрес проекта под опцией "IIS Express"
http://localhost:33333/
), затем измените его с http://localhost:33333/
на http://mydomain:333333/
Примечание. После этого изменения вы не должны нажимать кнопку "Создать виртуальный каталог" справа от поля "URL-адрес проекта" или кнопку "Сохранить" в Visual Studio, поскольку они не будут выполнены. Вы можете сохранить настройки после следующего шага 3.
- Откройте% USERPROFILE%\Мои документы \IISExpress\config\applicationhost.config, найдите "33333: localhost", затем обновите его до "33333: mydomain" и сохраните файл.
- Сохраните настройки, указанные на шаге 2.
- Щелкните правой кнопкой мыши веб-страницу в вашей визуальной студии и нажмите "Просмотреть в браузере". Теперь страница будет открыта в
http://mydomain:333333/
, а <script>alert(document.domain);</script>
на странице будет предупреждать "mydomain".
Примечание. Номер порта, указанный выше, считается 33333. Вам нужно изменить его на номер порта, установленный вашей визуальной студией.
Сообщение отредактировано: Сегодня я попробовал другое доменное имя и получил следующую ошибку: Не удалось запустить веб-сервер IIS Express. Не удалось зарегистрировать URL-адрес... Доступ запрещен. (0x80070005). Я выхожу из IIS Express, щелкнув правой кнопкой мыши значок IIS Express в правом углу панели задач Windows, а затем заново запустил свою визуальную студию в качестве администратора, и проблема исчезла.
Ответ 11
Я использовал iisexpress-proxy (от npm) для этого.
https://github.com/icflorescu/iisexpress-proxy
Ответ 12
Оставляя это здесь на всякий случай, если кому-то нужно...
Мне нужно было иметь пользовательские домены для установки Wordpress Multisite в IIS Express, но ничего не работало, пока я не запустил Webmatrix/Visual Studio в качестве администратора. Затем мне удалось привязать поддомены к одному и тому же приложению.
<bindings>
<binding protocol="http" bindingInformation="*:12345:localhost" />
<binding protocol="http" bindingInformation="*:12345:whatever.localhost" />
</bindings>
Затем перейдем к http://whatever.localhost:12345/.