Tomcat mod_proxy AJP静态资源目录

时间:2013-12-23 08:51:19

标签: apache tomcat tomcat7 httpd.conf ajp

我使用以下配置使用httpd和tomcat:

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

这很好用,但是当我呈现HTML时,来自tomcat的图像链接不起作用:

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

正如我所料:

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

3 个答案:

答案 0 :(得分:2)

您的图像放在tomcat的路径/img/image.jpg中,它是上下文相对路径,绝对路径是/MyProject/img/image.jpg,用于您的tomcat,尽管它是/ img / image。在apache之外的jpg。你代理/ - &gt; / MyProject所以当你将上下文名称添加到路径'MyProject'时,它实际上不像你提到的那样工作。

解决方案1:

在tomcat中使用上下文相对路径

img/image.jpg

在这种情况下,您必须小心所需的URI,例如/ MyProject / page1 / action1 /具有图像相对路径

../../img/image.jsp

解决方案2:

文档根路径与前导斜杠

一起使用
/img/image.jpg

并使用文档根(' href '属性)定义元素 base 。请注意链接!

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

请参阅http://www.w3schools.com/tags/tag_base.asp


解决方案3:

将项目映射到apache中与相同的URI (Personaly我也使用此解决方案,因为它非常简单,我使用常用​​词作为项目/上下文名称,例如'网站','网站'等。)。

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

解决方案4:

使用内容过滤器,例如mod_proxy_html http://httpd.apache.org/docs/current/mod/mod_proxy_html.html

注意:此解决方案有点慢(与您使用的过滤器无关)!


请注意 PROXY CONFIGURATION !!!

这只是重定向等,但你有一个错误的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

答案 1 :(得分:0)

您需要:

  1. 使用mod_html重写链接。这很慢,表明你做错了。

  2. 从/ to / MyProject发出重定向,您可以使用RewriteRule或<meta http-equiv="refresh" content="0; url=http://<host>/MyProject/">中的/index.html,进行更改{{1}

    的指令

    ProxyPass

  3. 这样代理就不会乱用URL路径。这是迄今为止更好的技术。您可能根本不需要ProxyPass /MyProject ajp://localhost:8009/MyProject指令,但如果这样做,则应该应用相同的更改。

答案 2 :(得分: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

只是尝试在入站上捕获那些不正确的图像路径。如果失败,请尝试使用尾部斜杠。