常见安装与防火墙故障排查方法
TOPIC SOURCE
centos7下yum安装nginx和php7和php-fpm
在企业内部经常会碰到新服务上线后端口不通的尴尬,往往不是代码本身的毛病,而是安装步骤或防火墙策略的细节被忽略了。下面把几种最常见的场景拆开来聊,既有新手常踩的坑,也有经验丰富的同事会忽视的细节。
安装阶段的“盲点”
- RPM 包来源不一致:有的系统默认仓库里根本没有最新版本,直接
yum install会得到旧版依赖,导致服务启动后报错。建议先检查/etc/yum.repos.d中是否已经添加官方或可信的第三方 repo。 - 系统服务未注册:在 CentOS 7 之后,
systemctl接管所有守护进程。即便手动执行了二进制文件,若没有创建对应的.service单元,重启后会“消失”。快速检查方式是systemctl list-unit-files | grep -i yourservice。 - SELinux 仍然处于 enforcing 模式:很多文档只提醒关闭防火墙,却忘了 SELinux 同样会拦截端口绑定。通过
getenforce看状态,必要时用setsebool -P httpd_can_network_connect on放通。
防火墙故障排查的“三步走”
- 确认防火墙是否激活:
firewall-cmd --state返回 running 则说明在生效,否则所有端口检测都毫无意义。 - 核对服务对应的 zone 与端口:
firewall-cmd --list-all会列出当前 zone 的开放端口与服务名。常见误区是把http(80)和https(443)写成了tcp/8080,导致实际监听的 8080 被误拦。 - 即时测试:
curl -I http://127.0.0.1:8080能通则说明本机防火墙放通,若失败则用firewall-cmd --add-port=8080/tcp --permanent再--reload。
有一次同事部署了一个基于 Node.js 的 API,日志里全是 EADDRINUSE,结果却在 netstat 看不到占用的端口。追根溯源后发现防火墙的 rich rule 把该端口的入站流量直接丢弃,服务虽然成功绑定,却收不到任何请求。把规则删掉后,API 瞬间恢复。
“在排查网络连通性时,先把防火墙当成‘黑盒子’,把所有可能的过滤规则列出来,再逐项验证,这比盲目重启服务更省事”。
所以,别把安装成功当作结束,也别把防火墙的默认状态当作理所当然。把每一步都写进检查清单,哪怕是一次小小的 --list-all,也能在问题爆发前给你留出修正的余地。

参与讨论
SELinux那个太隐蔽了,我有次卡了两天才想起来这玩意还在enforcing
这个配置在M1上能跑吗?
firewall-cmd –add-port加了不–reload等于白搭,血的教训😭
端口被rich rule丢弃这事太阴间了,日志还不报错,纯靠猜
感觉还行
curl本地测通才是第一步,外网不通还得看安全组
话说你们都怎么管理多台服务器的防火墙策略啊?有没有统一工具推荐?
之前部署Node服务也遇到EADDRINUSE,结果是容器端口冲突,和这里不一样
firewall-cmd –list-all输出太乱了,有没有人写过解析脚本?
firewall-cmd –state不查的话真的会踩大坑,之前搞了半小时才发现防火墙根本没开
SELinux这玩意真的让人头疼,每次都得特意记命令。
zone配置错了,端口死活打不开,真够折腾的
@ 小云朵糖 哈哈,我上次也折腾半天
systemctl那步检查太实用了,以前老忘注册服务