必须启用firewalld开机自启并永久放行http/https服务:执行sudo systemctl enable firewalld,再运行sudo firewall-cmd --permanent --add-service=http --add-service=https,最后sudo firewall-cmd --reload生效;验证用sudo firewall-cmd --list-services应显示http https。

要在Linux服务器上让Web服务被外网正常访问,必须确保80(HTTP)和443(HTTPS)端口在firewalld中放行,否则即使安全组/云防火墙已开通,请求也会在系统层被拦截。
确认firewalld服务状态并启用开机自启
先检查firewalld是否已安装并设为开机自启:运行 systemctl is-enabled firewalld,若返回 enabled 可跳过下一步;否则执行 sudo systemctl enable firewalld。
这一步不可省略——【若未启用开机自启,重启后firewalld不会自动运行,所有规则失效】。即使当前手动启动了服务,首次开机时仍会回到无防护状态,导致端口实际未开放。
用服务名方式永久放行HTTP与HTTPS
方法一(推荐):直接启用内置服务定义,语义清晰且兼容端口变更。
执行:sudo firewall-cmd --permanent --add-service=http --add-service=https
方法二:显式指定public zone并添加服务(适用于多zone环境或需明确作用域的场景)。
sudo firewall-cmd --zone=public --permanent --add-service=httpsudo firewall-cmd --zone=public --permanent --add-service=https
注意:不加 --permanent 参数的命令只在当前运行时生效,重启即丢失。别指望它能撑过一次reboot。
重载规则并验证结果
第一步:执行 sudo firewall-cmd --reload,使永久规则加载进运行时配置。
第二步:验证服务是否已列入允许列表:sudo firewall-cmd --list-services,输出中应包含 http https。
第三步:确认端口实际可达,从外部执行 telnet your_server_ip 80 和 telnet your_server_ip 443,连接成功表示放行生效。
如果 --list-services 没有输出 http 或 https,请立即检查是否漏掉了 --permanent 或未执行 --reload——这两个环节缺一不可。
















