[英]Tomcat mod_proxy AJP static resources directory
我使用以下配置使用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"/>
您的图像放在tomcat的路径/img/image.jpg中,它是上下文相对路径,绝对路径是/MyProject/img/image.jpg用于您的tomcat,尽管它是/img/image.jpg之外的阿帕奇。 你代理/ - > / MyProject所以当你将上下文名称添加到路径'MyProject'时,它实际上不像你提到的那样工作。
解决方案1:
在tomcat中使用上下文相对路径
img/image.jpg
在这种情况下,您必须小心所需的URI,例如/ MyProject / page1 / action1 /具有其图像相对路径
../../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:
将项目映射到apache中与tomcat中相同的URI (Personaly我也使用此解决方案,因为它非常简单,我使用常用词作为项目/上下文名称,例如'web','site'等。 )。
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
你需要:
使用mod_html
重写链接。 这很慢,表明你做错了。
从/ to / MyProject发出重定向 ,您可以使用RewriteRule或/ <meta http-equiv="refresh" content="0; url=http://<host>/MyProject/">
/index.html,
并将ProxyPass
指令更改为
ProxyPass /MyProject ajp://localhost:8009/MyProject
因此代理不会乱用URL路径。 这是迄今为止更好的技术。 您可能根本不需要ProxyPassReverse
指令,但如果这样做,则应该应用相同的更改。
我还没有测试这个准确性(并且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
只是尝试在入站上捕获那些不正确的图像路径。 如果失败,请尝试使用尾部斜杠。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.