31 января 2009

IIS и все-все-все

Так мне и не удалось добраться до блога чтоб закончить предыдущий пост... Грустно, но что делать, такова жизнь=) Думаю все еще получится.
Вчера у начальства возникла необходимость чтобы при обращении к любым сайтам установленным на IIS осуществлялся редирект с http на https. Ну ладно, идея в конце-концов благая, правильная, а то до этого у нас месяц примерно клиенты попадали не на сайт, а в черную дыру, т.к. запросы по http просто никто не обрабатывал, не до того было. А вчера значит понадобилось, у меня сервак стоит, срочно запускать надо, а им нет жизни без редиректа. Ладно, проехали...
Вообще-то я уже пытался это сделать раньше, но мне не хватило терпенья, а когда начальство берет за... и требует сделать за час, в общем все как-то само получается.
В общем есть несколько способов.
Первый - запретить обращение к сайту не по https и вместо страницы 404.3 IIS'a повесить свою собственную страничку, которая будет редиректить клиента (описано например тут, там вообще-то для exchange, но схема приемлима для многих вариантов). Но тут я столкнулся с такой фигней, что моя 404.3 страница никак не хотела появляться вместо "родной". К тому же тут используется asp + vbs, а это скучно.
На основе этого решения я попытался сделать следующее. Вешаем на 80 порт сайт с default.asp примерно с таким кодом

<%
If Request.ServerVariables("SERVER_PORT")=80 Then
Dim strSecureURL
strSecureURL = "https://"
strSecureURL = strSecureURL & Request.ServerVariables("SERVER_NAME")
strSecureURL = strSecureURL & "/{NameOfSecureDirectory}"
Response.Redirect strSecureURL
End If
%>

Нов моем случае пришлось бы допиливать код, т.к. редиректило меня на https://hostname/default.asp а это неприемлемо.

В общем все это хорошо, но выглядит, честно говоря не очень.
Во время блужданий по интернету я набрел на такую статью на iis.net.
Вкратце - самописный модуль для IIS. Я раньше пытался использовать этот сценарий, но у меня не получилось т.к. я пытался поместить модуль непосредственно в приложение (в моем случае это SharePoint и CRM) и там запросы обрабатывались не так как надо. Например CRM отказывался проводить аутентификацию пользователей и т.п. Но впрочем это и не удивительно, лишнее доказательство что в случае с MS лучше не добавлять ничего самописного в их продукты.

Тогда я сделал отдельный каталог со следующим наполнением:
каталог App_Code c redir.cs
index.html просто пустой файл, дань традиции=)
web.config в котором указано использовать данный модуль.

На 80 порту висит сайт с этим каталогом, а на 443 - собственно продакшн сайт. Для того чтобы модуль нормально работал сайт с модулем должен быть запущен в Application Pool'е в Integrated Mode. Собственно код есть по ссылкам, приводить его тут не вижу смысла, так же как и выкладывать исходники. Если не прав - напишите.

Комментариев нет:

Отправить комментарий