Вопрос или проблема
В настоящее время я пытаюсь внедрить систему Owncloud в нашей компании. У меня система Owncloud установлена и работает на внутреннем веб-сервере, который находится за файрволлом. Я могу получить доступ к установке внутри сети, перейдя по адресу servername.company.co.nz/owncloud
.
У нас есть веб-сервер IIS, который доступен извне (SBS 2012). Я хотел бы использовать его в качестве обратного прокси к облачной установке. Я прочитал несколько статей и руководств о том, как это сделать с помощью URL Rewriting и ARR на IIS – особенно это руководство показалось хорошим началом: IIS 7 Reverse Proxy based on domain name host?
Но пока мне не удалось создать какие-либо правила обратного прокси, которые бы работали.
В общем, я хотел бы, чтобы поддомен cloud.company.co.nz
проксировал запросы к внутреннему веб-серверу по пути server.company.co.nz/owncloud
, но мне не удалось разобраться, как это сделать.
В настоящий момент у меня есть новый веб-сайт на нашем сервере IIS, который привязан к имени хоста cloud.company.co.nz
, но это все, чего я смог достигнуть, не нарушая работы наших Exchange Web Services.
Пожалуйста, учитывайте, что я новичок в IIS. Любая помощь будет принята с благодарностью на данном этапе.
Правка 1:
В соответствии с предложением @jotap, мой web.config теперь выглядит так. Однако я все равно получаю ошибку 503. Есть ли идеи, почему я получаю эту ошибку? Также, где именно я должен искать логи и т.д. для подсказок?
Спасибо
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" enabled="false" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://1.2.3.4/owncloud{R:1}" />
</rule>
</rules>
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" enabled="false">
<match filterByTags="A, Form, Img" pattern="^http(s)?://1.2.3.4/owncloud/(.*)" />
<action type="Rewrite" value="http{R:1}://cloud.company.co.nz/{R:2}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
Дьявол кроется в деталях, когда дело касается обратного проксирования с помощью IIS и ARR. Основные шаги для достижения этого:
- Установите ARR и URLRewrite
- Настройте ARR для обратного проксирования: Уровень сервера IIS –> Application Request Routing Cache –> Server Proxy Settings
- Самая простая настройка, которая должна вас запустить, это “Enable Proxy” и оставьте остальное как есть.
-
Настройте сайт для проксирования всех запросов на новый хост. Это можно сделать через GUI, или вы можете использовать этот web.config для начала работы (поместите его в корень сайта, который выполняет проксирование):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="inbound">
<match url="(.*)" />
<action type="Rewrite" url="http://server.company.co.nz/owncloud/{R:0}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Не уверен, знаком ли ты с регулярными выражениями, это в основном говорит: “захвати URL после имени хоста и сделай запрос на server.company.co.nz, присоединив захваченный URL к окончанию подкаталога owncloud”.
Обратите внимание, что у вас могут возникнуть проблемы, если бэкенд-сайт сжимает контент (вы получите ошибку 500). Вдобавок, если это работает, вы можете обнаружить, что все ваши изображения и CSS поломаны, в этом случае вам также придется настроить переписывание исходящих данных, но это зависит от вашего бэкенда, и правила специфичны для проблем, с которыми вы можете столкнуться, так что посмотрите, как все пойдет. Возможно, вам придется сделать еще дюжину (или больше) корректировок, чтобы все заработало правильно.
Ответ или решение
Чтобы успешно настроить обратный прокси на IIS 7 для перенаправления с поддомена на внутренний сервер OwnCloud, необходимо учитывать несколько ключевых аспектов в рамках использования ARR (Application Request Routing) и перезаписи URL (URL Rewrite). Если вы новичок в IIS, все может выглядеть сложным, но давайте разберем это шаг за шагом.
Теоретическая основа
Обратный прокси-сервер позволяет перенаправлять запросы пользователей на другие серверы с целью балансировки нагрузки, повышения безопасности и упрощения архитектуры сети. В вашем случае задача заключается в том, чтобы сделать доступной установку OwnCloud для внешних пользователей через общий поддомен. Это делается путем настройки правил переписывания URL и проксирования, чтобы все HTTP-запросы, поступающие на поддомен cloud.company.co.nz
, перенаправлялись на внутренний сервер, работающий под адресом server.company.co.nz/owncloud
.
Пример настройки
-
Установка необходимых компонентов
- Перед началом убедитесь, что установлены компоненты IIS URL Rewrite и Application Request Routing (ARR). Эти расширения доступны через Microsoft Web Platform Installer.
-
Настройка ARR
- В менеджере IIS выберите переход на уровень серверной конфигурации и откройте
Application Request Routing Cache
. - В
Server Proxy Settings
включите опциюEnable Proxy
, что позволит вашему IIS-серверу действовать как прокси-сервер.
- В менеджере IIS выберите переход на уровень серверной конфигурации и откройте
-
Конфигурация URL Rewrite
- Создайте или обновите файл
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://server.company.co.nz/owncloud/{R:1}" /> </rule> </rules> <outboundRules> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1"> <match filterByTags="A, Form, Img" pattern="^http(s)?://server.company.co.nz/owncloud/(.*)" /> <action type="Rewrite" value="http{R:1}://cloud.company.co.nz/{R:2}" /> </rule> <preConditions> <preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" /> </preCondition> </preConditions> </outboundRules> </rewrite> </system.webServer> </configuration>
- Создайте или обновите файл
Применение знаний
-
Проверка конфигурации: необходимо удостовериться в правильности IP-адреса или имени хоста, который вы используете для перенаправления.
-
Логи и отладка: 503 ошибки часто указывают на недоступность конечной службы. Проверьте журналы IIS, чтобы получить больше информации о причине проблемы. Это можно сделать через Viewer событий Windows, выбором папки
Windows Logs -> Application
, чтобы отслеживать события, связанные с IIS и ARR. -
Учет специфики контента: если содержание вашего веб-сайта скомпрессировано, это может вызывать ошибки. Отключите сжатие на сервере OwnCloud или добавьте дополнительные правила для обработки сжатого контента.
Заключение
Настройка обратного прокси с помощью IIS может потребовать дополнительных настройок и тестов, особенно если есть специфические требования к безопасности и контенту. Понимание работы URL Rewrite и ARR — это ключ к успешному внедрению такой системы. Если возникнут дополнительные сложности, не стесняйтесь обращаться к документации Microsoft и интернет-сообществам для получения детализированной помощи. Ваши навыки и знания IIS значительно улучшатся после качественной реализации всех этих шагов.