Понадобилось мне как-то раз настроить на 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, который привязан к этой директории. Выбираем сайт мышкой.
Находим URL Rewrite — тыкаем.
Добавляем правило — Add Rule(s)...
Выбираем правило Reverse Proxy. OK.
Первая проблема. О как, хочешь пирожок? А нету! Для Reverse Proxy требуется фича для IIS под названием Application Request Routing (ARR). Тыкаем OK. Открывается сайт:
https://www.iis.net/downloads/microsoft/application-request-routing
Install this extension. Качаем ARRv3_0.exe.
Запускаем.
Ждём.
Начинается запуск инсталлятора Microsoft Web Platform Installer 5.1.
Ждём.
Читаем описание того, что мы ставим. На самом деле ARR позволяет не только делать обратное проксирование на один сервер. С помощью ARR можно настраивать фермы веб-серверов и выступать в качестве балансировщика, но в моей задаче всё проще. Install.
Нам говорят, что надо скачать файлы на 8,54 мегабайт. I Accept.
ARR состоит из нескольких модулей, в него входит External Cache 1.1, URL Rewrite 2.1, сам ARR 3.0.
Вторая проблема. URL Rewrite 2.1 не установился - установка прервалась. Говорят. что URL Rewrite уже установлен более старой версии. Требуется сначала его удалить вручную.
Тысяча чертей! Находим установленный старый URL Rewrite Module 2 и удаляем его. Он с 2011 года тут болтается.
Запускаем инсталлятор ARR заново.
Теперь URL Rewrite 2.1 устанавливается.
За ним ставится Application Request Routing 3.0.
ARR установлен. Возвращаемся к нашему IIS. Добавляем правило - Add Rule(s)... Выбираем правило Reverse Proxy. OK.
На этот раз правило создаётся. Пишем. "192.168.1.11:81". Ставим галку Enable SSL Offloading — терминируем SSL на этом прокси-сервере. OK.
Всё, собственно. В пустой папке сайта создался файлик 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} дописываются автоматически. Проверяем работу сайта - всё отлично.