Полное раскрытие информации: поскольку это, похоже, скорее проблема конфигурации, я удалил это из стека (где он не получил никакого ответа) и разместил здесь.
Проблема в том, как изменить requestContextPath, обслуживаемый Glassfish за mod_proxy_ajp. Сайт / приложение работает нормально при подключении напрямую к порту 8080 Glassfish, который в конечном итоге не Что я хочу сделать.
Поэтому мне нужна помощь в настройке моих серверов и развертывании jsf. Я вижу проблему, но не знаю, как ее решить. Это связано с requestContextPath.
Проще говоря, Apache направляет http://mysite.com/welcome.xhtml
что правильно и что я хочу, но страница без изображений и стилей.
Проблема в том, что сама Glassfish все еще указывает на http://mysite.com/myapp/*
. Таким образом, все ссылки, которые он обслуживает в приложении / сайте, по-прежнему ссылаются на requestContextPath. Это /myapp/*
часть http://mysite.com/myapp/welcome.xhtml
.
Когда я смотрю в исходный код страницы, изображения, на которые имеются относительные ссылки, по-прежнему указывают на requestContextPath (то есть / myapp /). Это поправимо, но это настоящая боль.
Однако со ссылками на страницы я не могу установить относительный путь.
Если я наведу курсор на ссылку на странице контактов, я увижу http://mysite.com/myapp/contact.xhtml
, и если я щелкну по нему, я получу 404. Вы можете увидеть /myapp/
также контекстный путь в источнике страницы.
Если я ввожу URL http://mysite.com/contact.xhtml
Я получаю страницу без указанных ссылок (requestContextPath).
На Apache
ProxyPass / ajp://littlewalterserver:8009/myapp-web/
ProxyPassReverse / ajp://littlewalterserver:8009/myapp_Project-web
На Glassfish
asadmin create-network-listener --listenerport 8009 --protocol http-listener-1 --jkenabled true jk-connector
Я попытался войти в Glassfish и установить веб-приложение в качестве веб-приложения по умолчанию. Я изменил /
в glassfish-web.xml (и проверил, совпадает ли он с файлом EAR).
Как я могу заставить Glassfish не включать /myapp/
контекст в URL? Это должно быть легко, если ты знаешь как, но я не знаю как, может ли кто-нибудь здесь помочь? Спасибо.
Я нашел кое-что, что работает прямо сейчас.
Предварительно я думаю, что когда я установил веб-приложение по умолчанию на вкладке безопасности, я также установил <context-root>/</context-root>
в файле glassfish-web.xml одновременно. Конечно, это не сработало.
Что сработало, так это то, что я установил веб-приложение EAR в качестве веб-приложения по умолчанию на экране безопасности консоли Glassfish и удалил <context-root>/</context-root>
из glassfish-web.xml.
Затем я изменил строки proxypass в httpd.conf на:
ProxyPass / ajp://myapp-web/
ProxyPassReverse / ajp://myapp_Project-web
Это работает, но это как бы побеждает одну из целей использования прокси, которая состоит в том, чтобы позволить веб-приложению продолжать работать в своем контексте, но дает пользователю возможность легко ссылаться. У вас может быть только одно веб-приложение по умолчанию в контексте, что сильно ограничивает вас, если вы хотите добавить больше сайтов в стиле управления контентом с помощью Glassfish. Без лога переписывания то есть. Жаль, что они не могли придумать что-то, чтобы это «просто работало».
Я все еще могу использовать apache для обслуживания статического контента и в качестве входной двери для SSL-соединений, но не очень доволен этим подходом. Если кто-то знает способ получше, я все еще готов к нему.