Назад | Перейти на главную страницу

Как запустить несколько приложений MVC в субдомене на IIS7?

Привет и спасибо, что искали.

Задний план

В настоящее время я завершаю контракт на разработку, и клиент хотел бы, чтобы я отправил сборку приложения на его сервер на основе IIS 7, на котором они хотели бы запускать несколько приложений MVC.

Одна из проблем, с которой я столкнулся, заключается в том, что этот сервер уже является субдоменом в их более крупной сети. Итак, если я войду SERVERNAME в моем браузере он автоматически перенаправляет SERVERNAME.COMPANYNAME.COM.

Теперь это нормально, если я помещу свое приложение в корневой каталог / веб-сайт по умолчанию. В этом сценарии щелчок по ссылке, запрашивающей admin.html направляет на `SERVERNAME.COMPANYNAME.COM/admin.html 'как обычно.

НО они хотят, чтобы я поместил приложение в поддомен на этом сервере, чтобы они также могли запускать другие приложения на том же сервере. Так что я предполагаю, что мне нужно MYAPP.SERVERNAME.COMPANYNAME.COM но я понятия не имею, как это сделать.

Ситуация усложняется тем, что все мое приложение и будущие, которые они хотят установить, основаны на MVC, который перехватывает и перезаписывает URL-адреса. Я предполагаю, что это само о себе позаботится, если я смогу просто успешно поместить свое приложение в субдомен для начала.

Что я пробовал

Ничего не работает. Я что-то упустил здесь?

Спасибо,

Мэтт

Во-первых, вы тестируете эти привязки с локального сервера? Если да, то две проблемы:

  1. В целях тестирования вам необходимо поместить псевдоним myapp в файл локальных хостов (C: \ Windows \ System32 \ Drivers \ etc \ hosts).
  2. Вам необходимо отключить кольцевую защиту, которая предотвратит доступ к службам на сервере с самого себя, если вы используете псевдоним DNS. я получил описание этой проблемы здесь (она часто сбивает с толку администраторов SharePoint). Быстрое решение (хотя оно отключает незначительную функцию безопасности Windows) - запустить его из командной строки PowerShell (запускается от имени администратора): New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck" -value "1" -PropertyType dword -Force и перезагрузитесь.

После этого я бы сказал в целом, что это связано не столько с MVC, сколько с DNS. Вы можете создать столько веб-сайтов в IIS, сколько захотите (MVC или другие) и придумать любые DNS-имена, которые захотите, при условии, что вы сообщаете сетевым DNS-серверам о совпадении имени и IP, чтобы люди могли их найти.

Похоже, вы привыкли просто размещать сайт на сервере, а затем использовать http://servername с других компьютеров в сети. Я всегда предпочитаю НИКОГДА не использовать имя хоста для веб-приложений. Я бы создал «DNS-псевдоним» в любом решении DNS, которое использует сетевой администратор (вероятно, Windows DNS Server), чтобы указать «appname» как псевдоним «servername». Затем в привязке веб-сайта я вставляю нужный заголовок узла. Преимущество здесь двоякое: я могу разместить более одного веб-приложения на сервере, а затем я могу переместить это веб-приложение в другое место, не сообщая пользователям (просто измените указатель DNS Alias).

Так что в вашем случае я рекомендую http://myapp (при условии, что это только для внутреннего использования), а в своей зоне DNS для companyname.com они просто добавляют DNS-псевдоним (запись CNAME) для myapp, чтобы указать на servername.

Если вы думаете, что он будет доступен из брандмауэра через Интернет, тогда вы захотите использовать полное доменное имя, например http://myapp.companyname.com. Применяются те же шаги для DNS, вам просто нужно также поместить его в Internet DNS.

Я бы НЕ делал поддомены имени веб-сервера, потому что это просто связывает все приложения на нем с этим веб-сервером (вы не можете перемещать их без боли для каждого пользователя, изменяя свои ссылки и привычки). Для myapp.companyname.com или myapp.servername.companyname.com работы не меньше / больше, так почему бы не упростить задачу для всех с помощью myapp.companyname.com. Если они говорят вам, что это упрощает определение местоположения, это то, для чего нужен псевдоним DNS ... просто ping myapp.companyname.com, и псевдоним DNS заставит ping сообщить вам РЕАЛЬНОЕ DNS-имя сервера.