2013-12-23 2 views
3

Я использую HTTPD с котом с помощью следующей конфигурации:Tomcat mod_proxy AJP статические ресурсы каталог

ProxyPass/ajp://localhost:8009/MyProject 
ProxyPassReverse/ajp://localhost:8009/MyProject 

Это работает отлично, за исключением моих графических ссылок с котом не работают, когда HTML делает:

<img src="/MyProject/img/image.jpg"/> 

, где, как я бы ожидать:

<img src="/img/image.jpg"/> 
+0

Off тему. Принадлежит serverfault.com. – EJP

+0

Ваши изображения в MyProject или это просто статическое содержимое в apache? –

+0

@MartinStrejc Они находятся в MyProject –

ответ

2

Ваши изображения размещены в tomcat at path /img/image.jpg, что является контекстным относительным путем, абсолютный путь - /MyProject/img/image.jpg для вашего tomcat, хотя это/img/image .jpg вне apache. Вы прокси/->/MyProject, поэтому, когда вы добавляете имя контекста в путь «MyProject», оно действительно не работает, как вы упомянули.

РЕШЕНИЕ 1: относительные пути

Использование контекстных в коте

img/image.jpg 

В этом случае вы должны быть осторожными относительно requrested URI, например,/ MyProject/стр.1/действие1/имеет свой образ относительный путь

../../img/image.jsp 

РЕШЕНИЕ 2:

Использование корневые документ трактов с слэш

/img/image.jpg 

и определить элемент основа с корнем документа ('href 'атрибут). Просто будьте осторожны с ссылкой!

<head> 
    <base href="http://www.mydomain.com/"> 
</head> 

см http://www.w3schools.com/tags/tag_base.asp


РЕШЕНИЕ 3:

Карта проекта в же URI в апаче как в коте (Personaly я использую это решение, а потому что это очень просто, и я использую общее слово в качестве имени проекта/контекста, например, «веб», «сайт» и т. д.).

ProxyPass /MyProject ajp://localhost:8009/MyProject 

РЕШЕНИЕ 4:

Используйте фильтр содержимого, таких как mod_proxy_html http://httpd.apache.org/docs/current/mod/mod_proxy_html.html

ПРИМЕЧАНИЕ: Это решение всегда немного медленно (не имеет значения, ведьма фильтр, который вы используете)!


Знайте PROXY КОНФИГУРАЦИИ !!!

Это только о перенаправлении и т. Д., Но у вас есть неправильная конфигурация вашего ProxyPathReverse!

ProxyPass/ajp://localhost:8009/MyProject 
ProxyPassReverse /MyProject http://www.mydomain.com/ 

увидеть полное объяснение http://www.humboldt.co.uk/the-mystery-of-proxypassreverse/#more-131

примеры конфигурации для чтения http://www.apachetutor.org/admin/reverseproxies

0

Вам нужно либо:

  1. Использовать mod_html, чтобы переписать ссылки. Это медленно и свидетельствует о том, что вы сделали не то.

  2. Выдать перенаправлять из/в/MyProject, которые вы можете сделать с RewriteRule или <meta http-equiv="refresh" content="0; url=http://<host>/MyProject/"> в /index.html, и изменить ProxyPass директивы

    ProxyPass /MyProject ajp://localhost:8009/MyProject

так что проксирования не путается с URL-адресами. Это, безусловно, лучшая техника. Вам, вероятно, не нужна директива ProxyPassReverse, но если вы это сделаете, вы должны применить одно и то же изменение.

0

Я еще не проверял это на точность (и AJP имеет тенденцию к короткому замыканию, например, переписывание в Apache, что делает дополнительные проверки и настройки почти обязательными). Так что с этой маленькой AJP-оговоркой вы могли бы попробовать что-то вдоль линий:

ProxyPass /MyProject ajp://localhost:8009/MyProject 
ProxyPassReverse /MyProject ajp://localhost:8009/MyProject 
ProxyPass/ajp://localhost:8009/MyProject 
ProxyPassReverse/ajp://localhost:8009/MyProject 

Просто, чтобы попытаться поймать эти неправильные пути изображений по входящему. Если это не удается, попробуйте выполнить трейлинг-косую черту.

Смежные вопросы