Кажется, я не понимаю, как правильно настроить ReverseProxy. Все возвращенные URL-адреса относятся к корневому каталогу «/», а не «/ tomcat», и отображается только основная страница tomcat «по умолчанию». Я использую Apache2 в качестве интерфейса для Tomcat со следующими правилами прокси:
ProxyPass /tomcat ajp://127.0.0.1:8009/
ProxyPassReverse /tomcat ajp://127.0.0.1:8009/
Я также пробовал использовать ProxyName в настройке коннектора Tomcat AJP. Использование mod_rewrite для проксирования запроса AJP также дало тот же результат.
Apache error.log отображает следующую строку (пытается загрузить изображения из собственного корня):
File does not exist: /var/www/asf-logo-wide.gif, referer:
РЕДАКТИРОВАТЬ: AJP работает через mod_jk, но все еще вызывает ту же проблему с HTTP при использовании подпапок.
Проблема в том, что ваш сервер tomcat встраивает ссылки в HTML с известным ему путем. Не путь к вашему прокси-серверу. (Получено из записи журнала * .gif)
ProxyPassReverse не изменяет ссылки в HTML. Он изменяет только заголовки HTTP.
Чтобы это работало, вам необходимо настроить tomcat с соответствующим расположением и путем в контексте приложения. Вероятно, вам потребуется переименовать файл webapp.war в ROOT.war и изменить любую конфигурацию контекста на «/».
Вы можете попробовать эту статью, в которой объясняется, как правильно использовать ProxyPassReverse:
http://www.humboldt.co.uk/2009/02/the-mystery-of-proxypassreverse.html
Поскольку вы выводите абсолютные URL-адреса, существует несколько распространенных сценариев:
Использовать mod_proxy_html.
Или вы можете использовать RewriteEngine
переписать URL-адреса в /
к /myapp/
.
RewriteEngine On
RewriteCond %{REQUEST_URI} ! ^/myapp/
RewriteRule ^/(.*)$ /myapp/$1
Это из памяти, поэтому вы можете проверить это самостоятельно с помощью mod_rewrite Документация. Но я бы рекомендовал придерживаться mod_proxy_html
поскольку переписывать ссылки, отправляемые клиентам, было бы менее сложно, чем переписывать каждый запрос внутри себя.
Если вам нужно вернуться к mod_proxy
:
<Location /tomcat>
ProxyPass ajp://127.0.0.1:8009/tomcat
ProxyPassReverse ajp://127.0.0.1:8009/tomcat
</Location>