腾讯云轻量应用服务器(Lighthouse)部署 Java 应用后无法访问,是新手最容易踩坑的场景之一。这通常不是代码问题,而是网络连通性或服务监听状态的问题。
按照从外到内、从简到繁的逻辑,请依次排查以下五个关键点:
1. 检查安全组规则(最常见原因)
轻量服务器的安全组默认只开放了 SSH (22)、HTTP (80) 和 HTTPS (443) 端口。如果你的 Java 应用运行在自定义端口(比如 8080, 8090, 8888 等),必须手动放行。
- 操作路径:登录腾讯云控制台 -> 轻量应用服务器列表 -> 点击你的实例 -> 防火墙(或“安全组”标签页)。
- 动作:添加一条入方向规则。
- 协议:TCP
- 端口范围:你 Java 应用监听的端口(例如
8080) - 授权对象:
0.0.0.0/0(表示允许所有 IP 访问) - 策略:允许
- 注意:修改规则后通常立即生效,无需重启服务器。
2. 确认 Java 进程是否在运行且绑定地址正确
很多时候应用启动了,但日志报错退出了,或者启动失败了。
-
查看进程:
使用 SSH 连接服务器,执行:ps -ef | grep java如果看不到你的 jar 包或 war 包对应的进程,说明应用没起来。去查看你的启动日志(如
nohup.out或 systemd 的 journalctl 日志),寻找 Exception 或 Error。 -
检查监听端口:
如果进程存在,检查它是否真的在监听你期望的端口:netstat -tlnp | grep <你的端口号> # 或者 ss -tlnp | grep <你的端口号>关键细节:
- 如果输出显示
0.0.0.0:8080或*:8080,说明监听所有网卡,外部可访问。 - 如果输出显示
127.0.0.1:8080,说明只监听了本地回环接口。这是导致网络无法访问的直接原因。你需要检查 Spring Boot 的配置文件(application.yml或properties),确保没有设置server.address=127.0.0.1,或者显式设置为0.0.0.0。
- 如果输出显示
3. 检查应用内部的防火墙(iptables/firewalld)
虽然轻量服务器主要靠腾讯云的安全组,但 Linux 系统内部也可能有防火墙拦截。
-
CentOS/RedHat 系列:
systemctl status firewalld如果处于 active (running) 状态,尝试临时关闭测试:
systemctl stop firewalld如果关闭后能访问,说明是系统防火墙问题。建议配置永久放行而非直接关闭:
firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --reload -
Ubuntu/Debian 系列:
默认可能没有开启 ufw,但如果开启了:sudo ufw allow 8080/tcp
4. 验证本地连通性(排除浏览器缓存或 DNS 问题)
有时候应用其实已经通了,但你的电脑访问有问题。
- Ping 测试:
在本地终端 Ping 服务器公网 IP,看是否能通。如果 Ping 不通,可能是服务器禁用了 ICMP 或运营商限制了 ICMP,但这不影响 TCP 连接。 - Telnet 测试:
在本地 Windows CMD 或 Mac/Linux 终端执行:telnet <你的公网IP> 8080或者
nc -vz <你的公网IP> 8080- 如果提示连接成功或显示 Open,说明网络层完全没问题,问题出在你的 Java 应用返回的内容(比如返回了 500 错误,或者响应体太大导致浏览器卡住)。
- 如果提示连接超时或拒绝,回到第 1、2、3 步继续排查。
5. 反向XX与 Nginx 配置(进阶场景)
如果你是通过域名访问,或者使用了 Nginx 做反向XX指向 Java 应用的 8080 端口:
- Nginx 是否运行:
ps -ef | grep nginx - Nginx 配置是否正确:检查
/etc/nginx/conf.d/或/etc/nginx/nginx.conf中的proxy_pass http://127.0.0.1:8080;是否正确。 - 权限问题:确保运行 Nginx 的用户有权限读取后端应用的响应。
快速自检清单(Copy-Paste 版)
- [ ] 安全组:腾讯云控制台已放行 TCP 端口 xxx。
- [ ] 进程:
ps -ef | grep java能看到你的应用进程。 - [ ] 监听:
netstat -tlnp | grep xxx显示0.0.0.0:xxx而不是127.0.0.1:xxx。 - [ ] 系统防火墙:
systemctl status firewalld已停止或已放行端口。 - [ ] 本地测试:
telnet <IP> <Port>连接成功。
特别提醒:
如果是 Spring Boot 应用,打包时请确保依赖完整。很多新手直接在 IDE 里 Run 没问题,打成 Jar 包后因为缺少某些 classpath 下的资源或依赖版本冲突导致启动失败(静默退出或报错退出),请务必查看 nohup.out 或启动脚本的标准错误输出。
云技术博客