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

无法通过浏览器连接运行Tomcat的Amazon EC2实例,求排查方案

这种突然掉链子的访问故障确实闹心,既然你已经排查了实例重启、Tomcat重启和安全组这些基础项,咱们可以从更细节的维度一步步深挖:

1. 先确认Tomcat真的在监听8080端口

登录EC2实例后,敲这两个命令之一检查端口绑定情况:

netstat -tulpn | grep 8080
# 或者更现代的ss命令
ss -tulpn | grep 8080

重点看输出里的监听地址:如果是127.0.0.1:8080,那Tomcat只允许本地访问,外部肯定连不上;得改成0.0.0.0:8080才行。要是完全没输出,说明Tomcat根本没启动成功,或者配置里改了端口。

2. 先在实例内部自测Tomcat连通性

用curl或者wget在Putty里试试访问本地Tomcat:

curl http://localhost:8080
# 或者
wget --spider http://localhost:8080

如果内部都拿不到响应,那问题大概率在Tomcat本身或者系统层面,比如Tomcat启动失败、JVM出问题,或者本地防火墙挡了端口。

3. 检查EC2实例内部的防火墙规则

别只盯着AWS安全组!Linux实例自带的防火墙(比如iptables或者firewalld)可能突然新增了规则堵了8080:

  • 用iptables -L -n查看有没有拒绝8080的规则
  • 如果是用firewalld的系统,敲firewall-cmd --list-all看看服务/端口列表里有没有8080
    要是发现有拦截,赶紧调整规则放行8080。
4. 扒Tomcat日志找线索(最关键!)

Tomcat的日志一般在${CATALINA_HOME}/logs目录下,重点看这几个文件:

  • catalina.out:记录Tomcat启动和运行的所有报错信息,比如端口被占、权限不足、依赖缺失
  • localhost.log:本地主机的请求和错误日志
  • localhost_access_log.*.txt:所有访问请求的记录,能看到有没有请求真的打到Tomcat上
    比如如果日志里出现Address already in use,就用lsof -i :8080找出占用端口的进程,杀掉再重启Tomcat就行。
5. 别漏了AWS网络ACL!

很多人只检查安全组,忘了子网的网络ACL——这东西是双向的,入站和出站都得允许8080端口的流量。去AWS控制台的VPC模块里,找到实例所在子网的网络ACL,确认:

  • 入站规则里有允许0.0.0.0/0访问8080的条目
  • 出站规则里有允许Tomcat回包的条目(比如允许所有出站流量,或者对应8080的回包)
6. 检查Tomcat核心配置有没有被改动

打开${CATALINA_HOME}/conf/server.xml,看Connector节点的配置:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           address="0.0.0.0"/> <!-- 重点看address属性,别是127.0.0.1 -->

另外也看看web.xml里有没有新增安全约束,或者Tomcat的Valve配置有没有加IP白名单限制。

7. 排查系统资源是否耗尽

用top或者htop看看实例的CPU、内存占用率:如果内存爆了,Tomcat可能会崩溃或者无法处理请求;用df -h检查磁盘空间,要是根目录满了,Tomcat连日志都写不了,更别说处理请求了。


内容的提问来源于stack exchange,提问作者grantedfour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:50:52