Перейти к основному содержанию

IIS как обратный прокси-сервер (reverse proxy)

IIS

Понадобилось мне как-то раз настроить на IIS 7 прозрачное проксирование запросов из интернета на другой web-сервер, расположенный во внутренней сети. По сути, нужно было настроить IIS 7 как обратный прокси-сервер (reverse proxy). Потом сделал то же самое на IIS 10.

Обратный прокси-сервер (reverse proxy) — тип прокси-сервера, который ретранслирует запросы клиентов из внешней сети на один или несколько серверов, логически расположенных во внутренней сети. При этом для клиента это выглядит так, будто запрашиваемые ресурсы находятся непосредственно на прокси-сервере.

Из коробки эта штука не заработала. Будем настраивать. Нам понадобится модуль для IIS 7 под названием URL Rewrite. У меня он установлен, но этого, как показала практика, недостаточно.

На IIS 10 всё поставилось таким же образом, только проблем было меньше.

Ссылки

ARR - Application Request Routing:

https://www.iis.net/downloads/microsoft/application-request-routing

Настраиваем reverse proxy

Итак, задача. Есть сайт http://setpizza.com, кстати, он продаётся. Сайт делегирован на наш web-сервер IIS 7. Нужно настроить обратное проксирование на другой сервер в локальной сети с IP адресом 192.168.1.11 на 81 порт. Не важно что там крутится, IIS, apache, nginx — мы не знаем. Допустим, мы решили проблемы с доступами и прорубили дырку по 81 порту на этот сервер с нашего IIS.

Открываем IIS там, где будем настраивать проксирование, создаём там пустую директорию, C:\redirect_setpizza.com. Создаём сайт redirect_setpizza.com, который привязан к этой директории. Выбираем сайт мышкой.

iis

Находим URL Rewrite — тыкаем.

iis

Добавляем правило — Add Rule(s)...

iis

Выбираем правило Reverse Proxy. OK.

iis

Первая проблема. О как, хочешь пирожок? А нету! Для Reverse Proxy требуется фича для IIS под названием Application Request Routing (ARR). Тыкаем OK. Открывается сайт:

https://www.iis.net/downloads/microsoft/application-request-routing

iis

Install this extension. Качаем ARRv3_0.exe.

iis

Запускаем.

iis

Ждём.

iis

Начинается запуск инсталлятора Microsoft Web Platform Installer 5.1.

iis

Ждём.

iis

Читаем описание того, что мы ставим. На самом деле ARR позволяет не только делать обратное проксирование на один сервер. С помощью ARR можно настраивать фермы веб-серверов и выступать в качестве балансировщика, но в моей задаче всё проще. Install.

iis

Нам говорят, что надо скачать файлы на 8,54 мегабайт. I Accept.

iis

ARR состоит из нескольких модулей, в него входит External Cache 1.1, URL Rewrite 2.1, сам ARR 3.0.

iis

Вторая проблема. URL Rewrite 2.1 не установился - установка прервалась. Говорят. что URL Rewrite уже установлен более старой версии. Требуется сначала его удалить вручную.

Тысяча чертей! Находим установленный старый URL Rewrite Module 2 и удаляем его. Он с 2011 года тут болтается.

iis

Запускаем инсталлятор ARR заново.

iis

Теперь URL Rewrite 2.1 устанавливается.

iis

За ним ставится Application Request Routing 3.0.

iis

ARR установлен. Возвращаемся к нашему IIS. Добавляем правило - Add Rule(s)... Выбираем правило Reverse Proxy. OK.

iis

На этот раз правило создаётся. Пишем. "192.168.1.11:81". Ставим галку Enable SSL Offloading — терминируем SSL на этом прокси-сервере. OK.

iis

Всё, собственно. В пустой папке сайта создался файлик web.config. В нём:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://192.168.1.11:81/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

"http://" и  {R:1} дописываются автоматически. Проверяем работу сайта - всё отлично.

Теги

 

Похожие материалы