Tomcat mod_proxy AJP 静态资源目录

Posted

技术标签:

【中文标题】Tomcat mod_proxy AJP 静态资源目录【英文标题】:Tomcat mod_proxy AJP static resources directory 【发布时间】:2014-01-11 11:05:06 【问题描述】:

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

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

这工作正常,除了我来自 tomcat 的图像链接在 html 呈现时不起作用:

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

如我所料:

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

【问题讨论】:

离题。属于 serverfault.com。 您的图片在 MyProject 中还是只是 apache 中的静态内容? @MartinStrejc 他们在我的项目中 【参考方案1】:

您的图像被放置在tomcat 的路径/img/image.jpg 中,这是上下文相对路径,您的tomcat 的绝对路径是/MyProject/img/image.jpg,即使它是/img/image。 apache 之外的.jpg您代理 / -> /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 中与 tomcat 中相同的 URI(我个人也使用此解决方案,因为它非常简单,并且我使用常用​​词作为项目/上下文名称,例如“网站”、“网站”等)。

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

解决方案 4:

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

注意:这个解决方案有点慢(你使用巫婆过滤器没关系)!


注意代理配置!!!

这只是关于重定向等,但是您的 ProxyPathReverse 配置错误

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

查看完整说明 http://www.humboldt.co.uk/the-mystery-of-proxypas-s-reverse/#more-131

阅读配置示例 http://www.apachetutor.org/admin/reverseproxies

【讨论】:

【参考方案2】:

您需要:

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

    从 / 到 /MyProject 发出 redirect,您可以使用 RewriteRule 或 /index.html, 中的 &lt;meta http-equiv="refresh" content="0; url=http://&lt;host&gt;/MyProject/"&gt; 并将 ProxyPass 指令更改为

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

这样代理就不会弄乱 URL 路径。这是迄今为止更好的技术。您可能根本不需要 ProxyPassReverse 指令,但如果需要,您应该应用相同的更改。

【讨论】:

【参考方案3】:

我还没有测试过它的准确性(而且 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

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

【讨论】:

以上是关于Tomcat mod_proxy AJP 静态资源目录的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习-通过httpd反向代理Tomcat

apache tomcat + apache httpd + mod_proxy + mod_rewrite + 表单发布数据

TOMCAT8009端口与AJP到底是什么?TOMCAT8009端口与AJP13协议

apache反向代理tomcat

对资源“执行 [为 apache-tomcat 绑定启用 mod_proxy]”执行操作“运行”时出错

前技术总监优化tomcat的建议,派上用场了