У меня есть один сервер 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>
К сожалению, даже с этим я не достигаю желаемого результата переписывания ссылки действия формы.
Вклад и понимание более чем приветствуются.