Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache Tomcat mod_代理AJP静态资源目录_Apache_Tomcat_Tomcat7_Httpd.conf_Ajp - Fatal编程技术网

Apache Tomcat mod_代理AJP静态资源目录

Apache Tomcat mod_代理AJP静态资源目录,apache,tomcat,tomcat7,httpd.conf,ajp,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"/>

我使用以下配置将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"/>

您需要:

  • 使用
    mod_html
    重写链接。这是缓慢的,并且表明你做了错误的事情

  • 发出从/到/MyProject的重定向,您可以使用重写规则或
    /index.html中的
    执行重定向,并将
    ProxyPass
    指令更改为

    ProxyPass/MyProjectajp://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
    
    只是尝试捕获入站服务器上那些不正确的映像路径。如果失败,请尝试使用尾部斜杠。

    您的图像放置在tomcat中的路径/img/image.jpg,这是上下文相对路径,tomcat的绝对路径是/MyProject/img/image.jpg,即使它位于apache之外的/img/image.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>
    

    解决方案4:

    使用内容过滤器,例如mod\u proxy\u html

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


    注意代理配置

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

    ProxyPass / ajp://localhost:8009/MyProject
    ProxyPassReverse /MyProject http://www.mydomain.com/
    
    请参阅完整的解释

    阅读配置示例

    离题。属于serverfault.com。您的图像在MyProject中,或者它只是apache中的静态内容?@MartinStrejc它们在MyProject中
    ProxyPass / ajp://localhost:8009/MyProject
    ProxyPassReverse /MyProject http://www.mydomain.com/