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

Абсолютные URL-адреса не работают с прокси-сервером Apache2 AJP Tomcat

Кажется, я не понимаю, как правильно настроить 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>