Назад | Перейти на главную страницу

Прокси-сервер Apache для Glassfish - как запретить подпапку в URL-адресе?

У меня есть один сервер Linux, на котором запущен Apache / 2.2.24, работающий как HTTP / HTTPS, так и сервер Glassfish 3.1.2, прослушивающий порт 8080.

Glassfish запускает одно развернутое приложение, в котором есть подпапки для отдельных веб-сайтов, например:

http://gfish:8080/rootSite
http://gfish:8080/rootSite/Site2
http://gfish:8080/rootSite/Site3
http://gfish:8080/rootSite/Site4

В Apache vhosts.conf файл весь трафик на порт 80 каждого виртуального хоста перезаписывается на 443 следующим образом:

RewriteEngine on
RewriteCond   %{SERVER_PORT}  !^443$
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://www.site2.com/rootSite/Site2$1 [L,R]

В Apache ssl.conf файл, каждый виртуальный хост настроен для передачи Glassfish следующим образом:

RedirectMatch ^/$ https://www.site2.com/rootSite/Site2$1
ProxyPass /rootSite/ http://gfish:8080/rootSite/
ProxyPassReverse /rootSite/ http://gfish:8080/rootSite/

Конечным результатом для веб-пользователя является то, что когда они переходят к http://www.site2.com они перенаправляются на HTTPS и проксируются на Glassfish, в результате чего они видят: https://www.site2.com/rootSite/Site2

Это текущая рабочая конфигурация.

В желанный В результате веб-пользователь не видит подпапку и видит сайт как: https://www.site2.com

Каков наиболее эффективный способ добиться этого при существующей конфигурации?

РЕДАКТИРОВАТЬ:

После некоторой игры выясняется, что некоторая конфигурация в файле ssl.conf не нужна. Я сократил его до следующего:

ProxyRequests Off
<Proxy *>
  Order deny,allow
  Allow from all
</Proxy>
ProxyPass / http://gfish:8080/rootSite/Site2/
ProxyPassReverse / http://gfish:8080/rootSite/Site2/`

С этой новой конфигурацией я могу опустить / rootSite / Site2 / из URL-адреса по желанию. тем не мение все форматирование CSS и изображения нарушены.

В Apache vhosts.conf file я меняю правило перезаписи как таковое:

RewriteRule ^(.*)$ https://www.site2.com$1 [L,R]

в ssl.conf файл, который я обрезал до:

ProxyRequests Off

ProxyPass /rootSite/ http://gfish:8080/rootSite/
ProxyPassReverse /rootSite/ http://gfish:8080/rootSite/

Этот первый набор операторов Proxy был добавлен, потому что Site2 полагается на файлы CSS и изображений из rootSite для отображения страниц.

ProxyPass / http://rootSite:8080/rootSite/Site2/
ProxyPassReverse / http://rootSite:8080/rootSite/Site2/

Второй набор операторов Proxy связывает внешний корень веб-сайта с внутренним корнем Glassfish Site2.

Эта конфигурация дала мне желаемый результат: внешние пользователи видели https://www.site2.com/

НОВАЯ ПРОБЛЕМА

Я передал эту конфигурацию разработчикам для тестирования, и оказалось, что в их коде есть абсолютные URL-адреса, которые они не хотят изменять. В этом случае на домашней странице есть форма входа, а действие формы указывает на абсолютный URL-адрес http://www.site2.com/rootSite/site2/login.xhtml Любой веб-пользователь, нажимающий кнопку отправки формы, затем перенаправляется на сайт, снова обнаруживая нежелательные подпапки в URL-адресе.

Решение, к которому я стремился, - реализовать и настроить mod_proxy_html.

С этой целью я скомпилировал необходимую информацию в Apache, чтобы включить модуль, а затем создал proxy_html.conf файл со следующим содержанием:

ProxyHTMLLinks a href
ProxyHTMLLinks area href
ProxyHTMLLinks link href
ProxyHTMLLinks img src longdesc usemap
ProxyHTMLLinks object classid codebase data usemap
ProxyHTMLLinks q cite
ProxyHTMLLinks blockquote cite
ProxyHTMLLinks ins cite
ProxyHTMLLinks del cite
ProxyHTMLLinks form action
ProxyHTMLLinks input src usemap
ProxyHTMLLinks head profile
ProxyHTMLLinks base href
ProxyHTMLLinks script src for

ProxyHTMLEvents onclick ondblclick onmousedown onmouseup \
onmouseover onmousemove onmouseout onkeypress \
onkeydown onkeyup onfocus onblur onload \
onunload onsubmit onreset onselect onchange

В рамках ssl.conf файл, я настроил конфигурацию прокси следующим образом:

ProxyPass /rootSite/ http://gfish:8080/rootSite/
ProxyPassReverse /rootSite/ http://gfish:8080/rootSite/

ProxyRequests Off
ProxyPass / http://gfish:8080/rootSite/Site2/
<Location />
ProxyPassReverse /
ProxyHTMLEnable On
ProxyHTMLURLMap http://gfish:8080/rootSite/Site2/ /
ProxyHTMLURLMap / /
</Location>

К сожалению, даже с этим я не достигаю желаемого результата переписывания ссылки действия формы.

Вклад и понимание более чем приветствуются.