firewall-cmd --zone=public --add-port=80/tcp --permanent 命令仅持久化规则,必须执行 firewall-cmd --reload 才生效;需先确认 firewalld 运行(firewall-cmd --state)、当前 zone(firewall-cmd --get-active-zones),再验证端口列表(--list-ports)及服务监听(netstat -tlnp | grep :80)。

firewall-cmd 是 CentOS 7 开放 80 端口的核心命令,但只执行 firewall-cmd --add-port=80/tcp --permanent 不够——它只是把规则写进配置,不 reload 就不会生效,也不代表服务本身在监听。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
确认防火墙状态和当前 zone
先看 firewalld 是否在运行:firewall-cmd --state 返回 running 才继续;如果返回 not running,得先启动:systemctl start firewalld。
再查当前活跃 zone:firewall-cmd --get-active-zones。绝大多数默认是 public,但别假设——万一改过,用错 zone 就白操作。
添加 80/tcp 端口并永久保存
必须带 --permanent,否则重启后失效:firewall-cmd --zone=public --add-port=80/tcp --permanent
注意三点:
- --zone=public 要和上一步查到的 zone 一致
- 80/tcp 格式不能写成 80 或 80/udp(HTTP 是 TCP)
- 命令成功只返回 success,不报错 ≠ 生效
reload 规则而非 restart 服务
用 firewall-cmd --reload,不是 systemctl restart firewalld。
前者动态加载新规则,连接不断;后者会短暂中断所有已建立连接,且没必要。
验证是否生效:
- 查端口列表:firewall-cmd --list-ports(应含 80/tcp)
- 查详细配置:firewall-cmd --list-all(能看到 ports: 80/tcp)
- 别漏掉:用 netstat -tlnp | grep :80 确认 nginx/httpd 确实在监听,否则开了端口也连不通
常见连不上 80 的真实原因
开了端口还访问失败?大概率卡在这三处:
- SELinux 拦截:执行 getenforce,若返回 Enforcing,临时放行:setsebool -P httpd_can_network_bind 1(对 nginx 需额外策略)
- 云服务器(如阿里云、腾讯云)安全组没开 80,防火墙再通也没用
- 应用没真正启动或绑定 0.0.0.0:80,只绑了 127.0.0.1:80,外部自然不可达










