把springboot项目打包成jar后传到linux服务器,执行java -jar启动显示运行正常,但外部浏览器死活连不上服务地址,这是部署时非常高发的状况。问题一般不在代码,而在网络链路或配置环节。

一、先确认进程是否真的在监听端口
登录服务器,用下面命令看端口监听情况。假如你的jar配置的是8080:
# 查看8080端口监听 netstat -tlnp | grep 8080 # 如果没有netstat可用ss ss -tlnp | grep 8080
如果什么都看不到,说明应用根本没绑上端口,检查启动日志里是否有Port_in_use或绑定失败信息。
二、检查jar绑定的IP地址
springboot默认绑到0.0.0.0,但有些人配置了server.address=127.0.0.1,这会导致只能本机访问。确认application配置:
# application.properties 示例 server.port=8080 server.address=0.0.0.0
若看到的是127.0.0.1,改成0.0.0.0后重启jar。
三、linux防火墙是否放行
centos常用firewalld,ubuntu常用ufw。以firewalld为例:
# 查看已开放端口 firewall-cmd --list-ports # 永久开放8080 firewall-cmd --zone=public --add-port=8080/tcp --permanent # 重载配置 firewall-cmd --reload
如果是ufw:
ufw allow 8080 ufw reload
四、云服务器安全组
如果你用的是云厂商的机器,还要登录控制台,确认安全组入方向放了对应端口,很多访问不到其实是安全组没开。
五、本地curl自测
在服务器本机执行:
curl http://127.0.0.1:8080/
若本地通但外网不通,重点查防火墙和安全组;若本地都不通,查应用配置和端口冲突。
六、用nohup避免误杀进程
很多人直接跑java -jar,ssh断开后进程没了,误以为还在跑。正确后台启动:
nohup java -jar app.jar --server.port=8080 > app.log 2>&1 &
七、常见排查清单
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 本地curl通,外网不通 | 防火墙或安全组 | 放端口 |
| 本地也不通 | 地址绑错或端口冲突 | 改server.address,查冲突 |
| 进程莫名消失 | ssh断开杀进程 | 用nohup |
按上面步骤逐一对照,jar在linux上运行却访问不到地址的问题基本都能定位解决。