Apache与后端Tomcat连接失败报503错误求助
Apache与Tomcat跨主机AJP连接失败排查方案
环境信息
- Apache服务器:10.176.165.21,RHEL 7.9,Apache/2.4.6
- Tomcat服务器:10.176.165.22,RHEL 7.9,Apache Tomcat/9.0.80
- 连接方式:mod_jk + AJP 1.3
问题现象
已完成Apache侧mod_jk及workers配置,Tomcat侧AJP端口8009已监听且防火墙放行,但mod_jk日志持续出现连接拒绝错误(errno=111):
[Thu Oct 05 04:37:08.658 2023] [ZR51tP-yAAFF7pqs0XfINAAAAAM] [26749:140710419421312] [info] jk_open_socket::jk_connect.c (818): connect to 10.176.165.22:8009 failed (errno=111) [Thu Oct 05 04:37:08.658 2023] [ZR51tP-yAAFF7pqs0XfINAAAAAM] [26749:140710419421312] [info] ajp_connect_to_endpoint::jk_ajp_common.c (1092): (worker1) Failed opening socket to (10.176.165.22:8009) (errno=111) [Thu Oct 05 04:37:08.658 2023] [ZR51tP-yAAFF7pqs0XfINAAAAAM] [26749:140710419421312] [error] ajp_send_request::jk_ajp_common.c (1768): (worker1) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111) [Thu Oct 05 04:37:08.658 2023] [ZR51tP-yAAFF7pqs0XfINAAAAAM] [26749:140710419421312] [info] ajp_service::jk_ajp_common.c (2892): (worker1) sending request to tomcat failed (recoverable), because of error during request sending (attempt=1)
排查与解决
1. 核心问题定位:Tomcat AJP监听接口限制
查看Tomcat的server.xml中AJP连接器配置:
<!-- Define an AJP 1.3 Connector on port 8009 --> <Connector protocol="AJP/1.3" address="::1" port="8009" maxParameterCount="1000" />
address="::1"表示Tomcat仅在IPv6本地回环接口监听8009端口,而Apache服务器通过IPv4地址(10.176.165.21)发起连接,因此无法建立通信。
2. 修改Tomcat AJP监听配置
修改server.xml中的AJP Connector,将address字段改为以下任意一种:
- 监听所有IPv4接口:
address="0.0.0.0" - 监听Tomcat服务器的IPv4地址:
address="10.176.165.22" - 直接删除
address属性(默认监听所有网络接口,包括IPv4和IPv6)
修改后的配置示例:
<!-- Define an AJP 1.3 Connector on port 8009 --> <Connector protocol="AJP/1.3" port="8009" maxParameterCount="1000" />
3. 验证监听状态
重启Tomcat服务后,在Tomcat服务器上执行以下命令,确认8009端口监听的是IPv4接口:
ss -tulpn | grep 8009
正常输出应包含0.0.0.0:8009或10.176.165.22:8009,而非::1:8009。
4. 额外验证(可选)
从Apache服务器测试与Tomcat 8009端口的连通性:
telnet 10.176.165.22 8009
若能建立连接,则网络层面无问题;若仍失败,需再次检查防火墙规则或路由配置。
5. 重启服务
- 重启Tomcat服务:
systemctl restart tomcat(根据实际服务名调整) - 重启Apache服务:
systemctl restart httpd
完成以上步骤后,mod_jk即可正常连接Tomcat的AJP端口。
内容的提问来源于stack exchange,提问作者Raboddep boddep
相关产品推荐
相关产品推荐

