You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache特定子目录请求转发至Tomcat的配置异常排查求助

Apache特定子目录请求转发至Tomcat的配置异常排查求助

各位大佬好,我现在在Ubuntu 22.04的服务器上折腾Apache转Tomcat的配置,原本Apache跑静态内容啥的都好好的,Tomcat也装完了,AJP端口、基础配置都调过,但就是特定子目录的转发死活不对,想请大家帮忙看看问题出在哪。

需求很明确:所有访问https://example.com/wapps/开头的请求,要转发到Tomcat的webapps目录对应的Web应用,比如用户访问https://example.com/wapps/MyWebapp/MyServlet,实际要让Tomcat去处理MyWebapp/MyServlet;除了/wapps/开头的请求,其他都还是由Apache正常接管。

我在443端口的虚拟主机配置里加了这段AJP代理的代码(80端口已经配置了强制跳转到443,这块是正常的):

<IfModule mod_proxy_ajp.c>
    ProxyPass /wapps/* ajp://127.0.0.1:8009/webapps/
</IfModule>

整个虚拟主机的配置大致是这样的(SSL相关的配置都正常,就不贴了):

<VirtualHost *:443>
    # 新增的Tomcat转发配置块
    <IfModule mod_proxy_ajp.c>
        ProxyPass /wapps/* ajp://127.0.0.1:8009/webapps/
    </IfModule>

    ServerAdmin webmaster@localhost
    ServerName example.com
    DocumentRoot /webroot/html/internetpublic/default/

    <Directory /webroot/html/internetpublic/default>
        AllowOverride All
        Require all granted
    </Directory>

    # 以下是正常工作的SSL配置项
    ...
</VirtualHost>

但现在的问题是,访问https://example.com/wapps/MyWebapp/MyServlet的时候,完全没触发转发——要么就是Apache直接返回404(因为静态目录里根本没这个路径),要么Tomcat那边的日志里根本看不到请求记录。我自己瞎试了好几种路径写法都没用,想问问大家有没有排查思路?

我自己先想了几个可能的排查点,也请各位补充:

  • 是不是Apache的mod_proxy和mod_proxy_ajp模块没真正启用?Ubuntu上要靠a2enmod开模块,我得再去跑a2query -m proxy和a2query -m proxy_ajp确认下状态
  • ProxyPass的路径映射是不是写错了?比如我用/wapps/*是不是不如直接写/wapps/?还有目标路径ajp://127.0.0.1:8009/webapps/,是不是应该去掉/webapps/?因为Tomcat本身的上下文路径就是基于webapps的,比如MyWebapp已经在webapps下面了,是不是应该直接转发到ajp://127.0.0.1:8009/?
  • Tomcat那边的AJP连接器配置有没有问题?比如server.xml里的Connector是不是真的监听了8009端口,有没有设secret但Apache这边没配对应的验证参数,导致连接被拒?
  • 会不会有其他配置优先级更高?比如我静态目录里的.htaccess有重写规则,或者其他虚拟主机配置覆盖了这个ProxyPass?

备注:内容来源于stack exchange,提问作者MBU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 07:19:30