CentOS 8测试Spring Boot,8080端口仅127.0.0.1监听如何改
把项目丢进CentOS 8,一启动Spring Boot,日志里赫然出现Tomcat started on port(s): 8080 (http) with context path ''``,可浏览器里死活刷不出页面。别急着骂防火墙,先扫一眼监听地址——十有八九是127.0.0.1:8080,外网当然进不来。下面把踩坑全过程摊开,顺带把改法一次说清,照着敲命令就能让8080对外敞开。

先确认是不是只绑了回环
开终端,输入`ss -ltnp | grep 8080`,如果返回`127.0.0.1:8080`,那铁定只监听本地;要是`0.0.0.0:8080`,问题就不在这,直接去看firewalld或云主机安全组。多数Spring Boot新手图省事,直接`java -jar demo.jar`,框架默认把回环当安全区,结果把自己也锁外面。
临时改法:启动参数一行搞定
不想动代码,最懒的办法是加启动参数:
`java -Dserver.address=0.0.0.0 -jar demo.jar`
`-Dserver.address=0.0.0.0`告诉内嵌Tomcat绑定所有网卡,外网IP、内网IP全放行。启动后再`ss -ltnp`,应该看到`0.0.0.0:8080`,浏览器敲`http://服务器公网IP:8080`立刻出Whitelabel Error Page也算胜利。

永久改法:application.properties两行配置
把参数写进配置文件,省得每次手敲。src/main/resources里打开`application.properties`,追加:
server.address=0.0.0.0
server.port=8080
重新打jar包,上传CentOS 8,`java -jar demo.jar`,监听地址永久生效。喜欢YAML就写`application.yml`:
server:

address: 0.0.0.0
port: 8080
缩进别错,错一格启动就报错。
systemd服务化:让改法跟着重启走
手动跑jar,SSH一断服务就挂。写个service文件最稳:
`sudo vim /etc/systemd/system/demo.service`
内容示例:
[Unit]
Description=Demo Spring Boot
After=network.target
[Service]
User=spring
ExecStart=/usr/bin/java -Dserver.address=0.0.0.0 -jar /opt/demo/demo.jar
SuccessExitStatus=143
Restart=on-failure
[Install]
WantedBy=multi-user.target
保存后依次执行:
`sudo systemctl daemon-reload
sudo systemctl enable demo
sudo systemctl start demo`
再`ss -ltnp`,8080已经挂在0.0.0.0,开机自启也安排明白。
防火墙别拖后腿
地址改完仍刷不出页面,八成是firewalld。一条命令放通8080:
`sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload`
云主机再去控制台勾安全组,双向放行才算完。
多网卡场景只想开内网怎么办
有些公司机器双网卡,公网IP直接暴露在eth0,不想让业务端口裸奔。可以把`server.address`写成内网地址,例如:
`server.address=192.168.10.15`
这样`ss -ltnp`只看到`192.168.10.15:8080`,外网扫描不到,办公网却能正常访问,安全又省心。
IPv6也能玩
CentOS 8默认开IPv6,如果想让同一端口同时监听IPv4与IPv6,直接`0.0.0.0`即可,Tomcat会额外绑定`:::8080`。若只想IPv6,就写:
`server.address=::`
浏览器用`http://[IPv6地址]:8080`访问,注意中括号别丢。
常见报错速查
端口被占用:`Address already in use`,换端口或杀掉旧进程。
地址无效:`Cannot assign requested address`,填错网卡IP,`ip addr`核对再写。
SELinux拦截:日志出现`SELinux is preventing`,要么关SELinux,要么给端口打标签:
`sudo semanage port -a -t httpportt -p tcp 8080`
一键脚本总结
懒人把下面脚本存成`fix-8080.sh`,传到服务器直接跑:
#!/bin/bash
绑定到所有网卡并放通防火墙
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
nohup java -Dserver.address=0.0.0.0 -jar demo.jar > app.log 2>&1 &
echo "Spring Boot已监听0.0.0.0:8080,日志输出到app.log"
`chmod +x fix-8080.sh && ./fix-8080.sh``,完事。
