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
相关产品推荐
相关产品推荐

