У меня есть приложение IIS и три следующих приложения:
CMT (Windows and Anonymously authenticated)
- CI
- EM
- Website (Windows authenticated)
CI и EM - это вспомогательные веб-службы, а веб-сайт - это, очевидно, веб-сайт. Теперь, если приложение размещено на cmt.mycompany.com, пользователь может получить доступ к веб-сайту следующим образом:
cmt.mycompany.com/website/mypage
Я хочу написать правило перезаписи URL, чтобы нашим пользователям не приходилось писать «веб-сайт» после DNS, и они могли просто открывать cmt.mycompany.com
или cmt.mycompany.com/mypage
для открытия главной или моей страницы соответственно.
<rule name="WebsiteMapping" stopProcessing="true">
<match url="^(?!\b(?:ci|em|website)\b).*$" />
<action type="Rewrite" url="http://{HTTP_HOST}/website/{R:0}" logRewrittenUrl="true" />
</rule>
Это правило просто перезаписывает любой URL-адрес, который не начинается с ci
, em
, или website
иметь website
добавлен после DNS.
У меня две проблемы, которые я не могу решить:
По какой-то причине URL Rewrite не работает с аутентификацией, поэтому всякий раз, когда я нажимаю cmt.mycompany.com
, Я получаю диалоговое окно с просьбой подтвердить свою подлинность, но оно не работает, даже если я ввожу свои учетные данные. Поскольку основное приложение (CMT) и веб-сайт размещены в разных пулах приложений, нам нужно было установить IIS ARR, но это не помогло.
Я попытался изменить правило на «перенаправление», и оно сработало, но возникла другая проблема. Итак, у меня есть балансировщик нагрузки, подключенный к 4 отдельным ящикам. Балансировщик нагрузки размещается под портом 80, но отдельные ящики размещаются под портом 9991. Когда я нажимаю отдельные поля, перенаправление URL-адреса работает успешно, но когда я нажимаю dns балансировщика нагрузки, порт 9991 (отдельного ящика) добавляется к dns балансировщика нагрузки !! Например, если я ударил cmt.mycompany.com/mypage
, Меня перенаправляют на cmt.mycompany.com:9991/website/mypage
что явно недействительно, поскольку балансировщик нагрузки размещен на порту 80, а не 9991.
Есть идеи помочь мне решить эти проблемы?
Спасибо!
Я вижу две возможности: NTLM не поддерживается с перезаписью URL + ARR. Для встроенной проверки подлинности Windows вам может потребоваться настроить Kerberos, чтобы он работал должным образом.
Вот страница с описанием общих шагов для sharepoint, но она применима и в другом месте: http://blogs.msdn.com/b/echarran/archive/2010/02/11/howto-configure-sharepoint-2010-for-kerberos.aspx
После более глубокого изучения статьи вам необходимо создать имена участников-служб для веб-приложений и делегировать управление удостоверению веб-приложения. Чтобы создать SPN, используйте такую команду: (HTTP применяется как для HTTP, так и для HTTPS)
setspn -s HTTP/[domain name of application] [domain name]\[server name hosting application]
Задайте имя участника-службы для каждого домена, на котором вам потребуется пройти аутентификацию, и для каждого сервера, на котором размещены приложения (если у вас есть веб-ферма). Затем откройте активный каталог и установите вид в расширенный режим. Откройте объект компьютера для одного из веб-серверов. Перейдите на вкладку делегирования. Измените переключатель на «Доверять этому пользователю для делегирования только указанным службам», убедитесь, что следующий переключатель - «Использовать любой протокол аутентификации». Щелкните Добавить. найдите идентификаторы пула приложений (если это сетевая служба, вам не нужно беспокоиться об этой части). нажмите ОК. При добавлении служб выберите все из них, за которые отвечает это удостоверение пула приложений, и нажмите кнопку ОК.
В качестве альтернативы может быть проще просто создать страницу по умолчанию в корне, которая будет перенаправлять трафик в нужное место, примерно так:
Response.Redirect("http://" + Request.Url.ServerName + "/WebSite" + Request.Url.PathAndQuery);
Настройте пользовательские ошибки на сайте по умолчанию, чтобы использовать эту страницу. Я проведу небольшое тестирование, но вам, возможно, придется создать другую страницу для ошибок, которая использует PathAndQuery URL-адреса перехода, чтобы отправить ее в нужное место.