понедельник, 3 августа 2009 г.

IIS 6-7 Redirect http to https




Приветствую вас, читатели ;)
Пафос, конечно, но все же.
Так вот, кому интересно, буду писать сегодня про то, как без всяких извращений (или же с ними) можно сделать перенаправление траффика сайта с http на https версию.
Значит, для начала Microsoft IIS 6.0. Старый добрый, он поддерживает кучу способов.

1. Отдельный сайт для редиректа

Идея заключается вот в чем. У вас есть сайт №1, который работает по http (порт 80) и https (порт 443 - ssl).
У этого сайта меняется порт TCP (80) на другой (81 или 8888 или 8112 - любой).
Кроме этого, включается опция “Require SSL”
Redirect settings
image015
Вы создаете еще один сайт, путь для него указываете отличный от других сайтов, например, C:\InetPub\WWWRoot2.
Далее, в свойствах сайта, на закладке “Home Directory” указываете, что все запросы нужно перенаправлять на https://example.com$V$Q.
Кроме того, выбираете опцию “The exact URL entered above”
image013
Что такое $V и $Q можно почитать в Redirect Reference.
Применяем все изменения, и запускаем новый сайт. Теперь трафик автоматически переходит с http на https.

2. ISAPI REWRITE

Для IIS 6.0 существует ISAPI-расширение ISAPIREWRITE, которое позволяет создавать гибкие правила перенаправления и перезаписи URL. Подробнее о возможностях и о инсталляции модуля можно почитать тут.
После установки данного расширения нужно всего навсего сделать текстовый файл httpd.ini в корневой папке вашего сайта и заполнить его следующим образом:
[ISAPI_Rewrite]
#
http://www.isapirewrite.com/
# Defend your computer from some worm attacks
RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O]
RepeatLimit 32
# Block external access to the httpd.ini and httpd.parse.errors files
RewriteRule /httpd(?:\.ini|\.parse\.errors).* / [F,I,O]
# redirect all http requests to https
RewriteCond %HTTPS (?!on).*
RewriteCond Host: (.*)
RewriteRule (.*) https\://$1$2 [I,RP]

3. Обработчик для HTTP статуса 403.4

Еще один интересный способ заключается в использовании обработчика статуса HTTP 403.4 - Forbidden: SSL is required to view this resource error, but the Web site is not configured to use SSL.
Создаем текстовый файл RedirectToHttps.asp в папке C:\inetpub\wwwroot\customerrors\. Содержимое его ниже:
Открываем в Microsoft IIS 6.0  Manager свойства сайта, который нужно заставить работать только по HTTPS.
Вкладка “Directory Security”, кликаем по кнопке “Edit” в секции “Secure communications”. Ставим галочку “Require SSL”. Дальше, нужно открыть вкладку “Custom Errors”. Выбираем запись для ошибки 403.4 и кликаем по “Edit”.
В выпадающем списке выбираем “File”, и с помощью кнопки “Browse” выбираем наш файлик c:\inetpub\wwwroot\customerrors\RedirectToHttps.asp.
Вроде все

Новый Microsoft IIS 7.0

поддерживает те же самые способы.

1. Родной способ с помощью HTTP Redirect:

Создаем сайт, который будет заниматься редиректом, и делаем для него binding на HTTP port 80.САЙТ не должен ссылаться на отдельную папку (чтобы не было коллизий с конфигурацией).
В оригинальном сайте удаляем binding на 80 порт и оставляем только 443 порт.
Открываем в новом сайте опцию HTTP Redirect и настраиваем как показано на картинке ниже:
HTTP Redirect feature
Опять же используются те же переменные $V$Q и опция “Redirect all requests to exact destination (instead of relative to destination)”.
Запускаем сайт и радуемся.

2.URLRewrite для Microsoft IIS 7.0

Скачиваем расширение для IIS 7.0 от Microsoft с названием URLRewrite и устанавливаем.
Далее, в web.config вашего приложения добавляем следующие строчки:










3. Обработчик для HTTP статуса 403.4

Можно использовать тот же самый скрипт, который использовался для IIS 6.0.
Ну и впридачу, обще-ASP.NET способ - реализация модуля или обработка события Application_BeginRequest.
Детали реализации модуля можно увидеть в блоге одного парня Sukesh’а.

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