firewalld 开放 80/443 端口需先确保服务运行(systemctl start firewalld && systemctl enable firewalld),再执行 firewall-cmd --permanent --add-service=http 和 --add-service=https,最后 firewall-cmd --reload 生效;漏掉 --permanent 或未 --reload 则规则不持久或不生效。

firewalld 是 CentOS 7/8 默认的防火墙服务,开 80 和 443 端口本质是让 firewalld 允许这两个端口的入站 TCP 流量。直接执行命令就能生效,但漏掉 --permanent 或没 --reload 就白干。
确认 firewalld 正在运行且启用
如果 firewalld 没启动,所有 firewall-cmd 命令都无效:
- 检查状态:
firewall-cmd --state,返回running才算正常 - 没运行就启动:
systemctl start firewalld - 确保开机自启:
systemctl enable firewalld - 别用
iptables或ufw—— CentOS 7+ 默认不用它们,混用会冲突
用 service 名还是 port 号?选 http 和 https 更稳妥
推荐用服务名而非裸端口号,因为 http 和 https 在 firewalld 里已预定义为 80/tcp 和 443/tcp,语义清晰、不易输错:
- 永久放行:
firewall-cmd --permanent --add-service=http和firewall-cmd --permanent --add-service=https - 如果必须按端口操作(比如你改了 Apache 监听 8080,但想对外映射成 80),才用:
firewall-cmd --zone=public --permanent --add-port=80/tcp -
--zone=public可省略(默认就是 public),但显式写出更明确 - 别漏掉
--permanent:不加它,重启后规则消失;加了也得手动--reload才生效
reload 不等于 restart,别断掉现有连接
firewall-cmd --reload 是重载配置,不影响当前已建立的 SSH、HTTP 连接;而 systemctl restart firewalld 会中断所有连接,容易把自己踢出服务器:
- 执行完
--add-service或--add-port后,必须跑一次:firewall-cmd --reload - 验证是否生效:
firewall-cmd --list-ports(看端口)或firewall-cmd --list-services(看服务) - 查单个端口是否开放:
firewall-cmd --query-port=443/tcp,返回yes才算成功 - 阿里云 / 腾讯云等厂商还要额外配安全组——防火墙开了,云平台安全组没开,照样不通
常见失败原因和排查点
端口“开了”但外网访问不了,大概率卡在这几个地方:
- 服务本身没监听:
ss -tlnp | grep ':80\|:443'看httpd或nginx是否真在监听,不是只开了防火墙 - SELinux 拦截:临时关闭测试
setenforce 0,若恢复访问,说明需调整 SELinux 策略(如http_port_t) - 云服务器安全组未放行:CentOS 防火墙只是最后一道关,云平台控制台的安全组规则必须同时允许 80/443 入方向
- 本地网络或 ISP 屏蔽 80/443:用手机流量或第三方工具(如 curl https://your-ip)交叉验证


















