IIS Express не запускается на локальном хосте с ipv6
Здравствуйте, отличные пользователи Stackru!
Вот что-то смешное, что случилось со мной - может быть, вы можете объяснить, почему?
В середине моего рабочего дня вчера моя установка IIS Express перестала работать.
Сначала я подумал, что это проблема с проектом ASP.NET, над которым я работал, просто завис и не смог запуститься, потому что страница продолжала зависать до истечения времени ожидания. Затем я попробовал некоторые другие проекты, также настроенные для работы на localhost:8080 - и они тоже не загружались - даже обычные HTML.
Теперь, когда я говорю, что они не будут загружаться; Я имею в виду никакой активности вообще. Страница будет "загружаться" в Chrome целую вечность, и консоль IISExpress не будет регистрировать какие-либо запросы GET, пока со временем вкладка в Chrome не отобразит ошибку тайм-аута.
Этим утром я (с некоторой помощью) кое-что понял - по какой-то причине, когда я пингнулся localhost
адрес ipv6 ::1:
вернется вместо адреса IPv4 127.0.0.1
- Я не замечал такого поведения раньше, и я не изменил сетевые настройки.
Я отредактировал свой файл HOST и включил запись для 127.0.0.1 localhost
заставить ping localhost
вернуть адрес ipv4. Это сработало, и когда я снова попробовал IIS Express, привязка к localhost: 8080 также сработала.
Мой вопросЧто на земле?!?!
Я понятия не имею, почему это произошло. Я знаю, что мне удалось решить эту проблему, отредактировав файл HOST, но кто-нибудь знает, с какой стати это произошло?
Любая идея, почему ping localhost
вдруг начать возвращать адрес ipv6? И есть идеи, почему IIS Express не работает с ipv6? (Я предполагаю, что движок IIS уже запекся).
Я хотел бы понять, что случилось, чтобы избежать дальнейших проблем и ради любопытства.
Спасибо заранее за любую информацию,
Фил
2 ответа
- Откройте окно командной строки администратора, затем выполните это с портом, к которому вы привязываете:
netsh http add urlacl url="http://[::1]:8080/" user=everyone
, Это говорит вашей системе, что это круто::1
- открыто
%USERPROFILE%\Documents\IISExpress\config\applicationhost.config
найдите раздел вашего сайта и добавьте привязку IPv6:<binding protocol="http" bindingInformation="[::1]:8080:*" />
Образец:
<site name="WebSite1" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Users\ryan.versaw\Documents\WebSite1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:8080:localhost" />
<binding protocol="http" bindingInformation="[::1]:8080:*" />
</bindings>
</site>
Пока в вашей системе включен IPv6,::1 и 127.0.0.0 являются допустимыми адресами для localhost. То, что из этих двух возвращается системой и используется, например, для эхо-запросов, является более или менее недетерминированным, если только программа не запрашивает адрес IPv4 или IPv6 - и поскольку эхо-запрос Windows может обрабатывать любой из них, вероятно, он этого не делал.
Что касается IIS, ответы, подобные этому, предполагают, что это поведение специально, и вам нужно включить привязку к IPv6-адресу отдельно: https://serverfault.com/questions/123796/get-iis-7-5-to-listen-on-ipv6