Вопрос или проблема
Кратко:
IIS 7 + Apache Tomcat 7 + isapi_redirect.dll
:
У меня развернутое и работающее Tomcat-приложение, доступное по адресу http://localhost:8080/my_app
.
Я хотел бы видеть тот же контент по адресу http://my_app.local
(а не на сайте по умолчанию Tomcat [который вы можете видеть ниже]).
Я настроил isapi_redirect.dll
, так что в данный момент контент my_app.local
равен контенту localhost:8080
, но этого недостаточно, я хотел бы связать localhost:8080/my_app
с my_app.local
.
(У меня есть 127.0.0.1 my_app.local
в файле hosts, так что я уже могу открыть my_app.local
, НО сейчас он показывает только сайт по умолчанию Tomcat (то же самое, что доступно по адресу http://localhost:8080
)).
Пожалуйста, прочитайте, что я уже пробовал:
Долгое объяснение:
У меня установлены IIS 7 (7.5.7600.16385) и Apache Tomcat/7.0.22.
- Я развернул приложение (давайте назовем его “
my_app
“) в Tomcat,
которое теперь доступно по адресуhttp://localhost:8080/my_app
, работает
нормально. Я добавил новый веб-сайт в панели IIS с путем к
развернутомуmy_app
Tomcat, который выглядит следующим образом: “c:\Program
“
Files\Apache Software Foundation\Tomcat 7.0\webapps\my_app - Я привязал имя хоста
my_app.local
. - После этого я настроил
isapi_redirect.dll
по этой (или
той). - Теперь, когда я открываю
http://my_app.local
, я вижу сайт по умолчанию Tomcat
(см. ниже), который совпадает с контентом по адресуhttp://localhost:8080/
!! (Вот в чем проблема!!!) - НО по адресу
http://my_app.local
я хотел бы видеть тот же контент, что и
по адресуhttp://localhost:8080/my_app
.
Как я могу это сделать? Большое спасибо заранее!!
мои файлы конфигурации:
- isapi_redirect.properties (я создал директорию-соединение к c:\tomcat, так что это тоже работает 🙂 )
- workers.properties
- uriworkermap.properties
- rewrites.properties (пустой)
ОБНОВЛЕНИЕ
Я нашел это: http://tomcat.apache.org/connectors-doc/generic_howto/proxy.html
Случай B: вам нужно скрыть компоненты пути для всех запросов к
приложению. Вот рецепт для случая, когда вы хотите скрыть
первый компонент пути /myapp. Более сложные манипуляции оставлены
на усмотрение читателя. Сначала решение для случая
Apache httpd:
- Используйте mod_rewrite, чтобы добавить /myapp ко всем запросам перед их пересылкой на бэкенд:
[…]- Используйте mod_headers, чтобы переписывать любые HTTP-редиректы, которые может вернуть ваше приложение.
[…]- Снова используйте mod_headers, чтобы переписывать пути, содержащиеся в любых куках, которые может установить ваше приложение.
[…]Если вы используете Microsoft IIS в качестве веб-сервера, плагин ISAPI предоставляет способ выполнить первый шаг с встроенной функцией. Вы
определяете файл сопоставления для простых изменений префикса, таких как это:# Добавить контекстный префикс ко всем запросам ... /=/myapp/ # ... или изменить какой-либо префикс ... /oldapp/=/myapp/
и затем поместите имя файла в элемент
rewrite_rule_file
в
реестре или в вашемisapi_redirect.properties
файле. В вашем
uriworkermap.properties
файле вам все равно нужно сопоставить URL-адреса до их переписывания! […]
Поддержки для Шагов 2 (переписывание ответов редиректа) или 3 (переписывание путей куков) нет.
Я был удивлен, что написано “Поддержки для Шагов 2 (переписывание ответов редиректа) или 3 (переписывание путей куков) нет.“, не знаю, все ли еще так, но тогда что? Я снова застрял?
В зависимости от вашей цели (легкий для запоминания URL?), возможно, вполне нормально просто перенаправить my_app.local -> my_app.local:8080/my_app?
Однако это не скроет целевой сайт.
Создайте новый сайт IIS на my_app.local и позвольте ему перенаправить на ваше приложение :8080/my_app.
http://technet.microsoft.com/en-us/library/cc732930(WS.10).aspx
Можете попробовать это:
http://blogs.iis.net/carlosag/archive/2010/04/01/setting-up-a-reverse-proxy-using-iis-url-rewrite-and-arr.aspx
Это, похоже, то, что вам нужно, переписывание URL и маршрутизация приложений.
Ответ или решение
Чтобы получить доступ к вашему приложению Tomcat по адресу http://my_app.local
, а не по адресу http://localhost:8080/my_app
, вы можете настроить IIS и использовать URL Rewrite и Application Request Routing (ARR). Ниже приведены шаги, которые помогут вам этого добиться.
Шаги по настройке:
-
Установите необходимые модули:
Убедитесь, что у вас установлены следующие компоненты на IIS:- URL Rewrite: Скачайте и установите модуль URL Rewrite для IIS.
- Application Request Routing (ARR): Скачайте и установите ARR. После установки убедитесь, что ARR активирован в IIS.
-
Создайте новый сайт в IIS:
- Откройте IIS Manager.
- Щелкните правой кнопкой по "Sites" и выберите "Add Website…".
- Укажите имя сайта, выберите физический путь (например,
C:\inetpub\my_app
), и введитеmy_app.local
в разделе "Host Name". - После того как сайт будет создан, проверьте, доступен ли он по адресу
http://my_app.local
.
-
Настройте обратный прокси:
-
В IIS Manager выберите созданный сайт.
-
Откройте "URL Rewrite".
-
В правом столбце выберите "Add Rule(s)…" и затем "Blank rule".
-
Назовите правило, например "ReverseProxyToTomcat".
-
В секции "Match URL" укажите следующие параметры:
- Requested URL: Matches the pattern
- Using: Regular expressions
- Pattern:
.*
(чтобы захватывать все запросы)
-
Перейдите в секцию "Conditions" и добавьте условие с пустым полем (необязательно).
-
В секции "Action" выберите:
- Action Type: Rewrite
- Rewrite URL:
http://localhost:8080/my_app/{R:0}
- Убедитесь, что установлены флажки "Append query string" и "Redirect request to another site".
-
-
Настройте proxy для проксирования запросов:
- Перейдите в
Application Request Routing Cache
в разделе IIS. - Найдите "Server Proxy Settings…" и включите прокси.
- Убедитесь, что выбраны параметры, позволяющие проксировать запросы.
- Перейдите в
-
Настройте файл
hosts
:- Проверьте, есть ли строка
127.0.0.1 my_app.local
в файлеC:\Windows\System32\drivers\etc\hosts
. Это позволит вашему компьютеру распознаватьmy_app.local
.
- Проверьте, есть ли строка
-
Перезапустите службы:
- После всех изменений рекомендуется перезапустить IIS для применения настроек.
Важные замечания:
- Если Web-приложение возвращает перенаправления или устанавливает куки с путями, которые могут не срабатывать должным образом, вам может понадобиться использовать дополнительные настройки для повторной записи заголовков или cookie, однако, как правило, правила, указанные выше, должны сработать для большинства случаев.
- Проверьте настройки брандмауэра или сетевые ограничения, если после всех настроек
http://my_app.local
не работает.
Следуя данным шагам, вы сможете настроить доступ к вашему приложению Tomcat по адресу http://my_app.local
, вместо выполнения запросов напрямую к Tomcat на порту 8080
.