在配置基于新版本Apache-2.4.46+和Tomcat-9.0.45+的新web应用时,使用Mod_jk连接时,使用与之前的版本在每个文件运行后,Apache的JSP文件请求被触发到Mod_jk并转发给Tomcat处理,报错,报错信息是connectionfailedtobackendservice之类的。大致是Apache无法通过mod_jk连接Tomcat的服务。并且单独测试Apache和Tomcat的运行,比如单独请求非JSP文件,或者在Tomcat的8080端口请求相应的JSP文件,都可以正常处理相应的请求。据此判断问题出在mod_jk。什么地方出了错?我们在apache/conf/extra/httpd-jk.conf中打开相应的详细日志记录。\#我们的JK日志级别(trace,debug,info,warn,error)JkLogLeveltrace输出所有步骤的过程记录。日志记录很快返回无法连接到位于::1:8009的服务。问题似乎马上就出现了。由于配置了IPv4和IPv6双栈网络地址,localhost在某些服务级别的解析可能是ipv4address:127.0.0.1或ipv6address::1。可能由于某种原因,主机名localhost在Apache的mod_jk中解析为ipv6地址,而Tomcat程序解析为ipv4地址。相当于mod_jk中的worker配置:apache/conf/extra/workers.properties:worker.balancer.balance_workers=node1worker.node1.reference=worker.templateworker.node1.host=localhost\#worker.node1.host=127.0。0.1worker.node1.port=8009在这里启动后,连接到::1:8009服务,在Tomcat中服务可能启动在127.0.0.1:8009,所以双方只是因为v4或者v6的原因错过了的IP地址。如果是这种情况,似乎很容易解决:1)修改系统的hosts文件,消除主机名localhost的歧义。只用在传统的127.0.0.1上,对于::1地址,也命名为localhost-ipv6;或2)在Apache和Tomcat的配置文件中,不再使用主机名,而是使用清晰具体的IP地址。经过一番折腾,我们排除了localhost的歧义,只指向127.0.0.1,同时在Tomcat/conf/server.xml中:
