Nginx 装完,服务器上 curl 127.0.0.1 能出页面,外面浏览器一直转圈。多半不是服务没起,是 80 端口被防火墙挡了。
CentOS 的防火墙换过一轮。7 以后默认 firewalld,6 及更早是 iptables 服务,两套规则各管各的,网上的命令混着抄就会失效。
先确认跑的是 firewalld 还是 iptables
执行 systemctl status firewalld,看到 active (running) 就是它在管事。老系统上查 iptables 的状态,或者看 iptables -L 有没有一堆规则。两个服务理论上能同时装,但实际只该留一个,不然规则互相打架。
临时关和永久关的命令
临时停用敲 systemctl stop firewalld,重启后还会自己起来。要开机也不启动,再执行 systemctl disable firewalld。查看当前状态用 firewall-cmd --state,返回 not running 才算真关了。老系统对应的是 service iptables stop 和 chkconfig iptables off。
更稳的做法是只放行端口
生产机器直接关防火墙,等于把门全打开。多数情况只放行需要的端口:firewall-cmd --permanent --add-port=80/tcp,再加一条 443,最后 firewall-cmd --reload 生效。查已放行的规则用 firewall-cmd --list-all。加了 permanent 却没 reload,是最常见的白忙一场。
关了还连不上,别死磕防火墙
- 云服务器还有一层安全组,控制台里要单独放行
- SELinux 会拦端口,getenforce 返回 Enforcing 时先查它
- 服务只监听了 127.0.0.1,外面当然进不来,看 ss -lntp 的输出
- 运营商或者机房封了 80 端口,换 8080 试一下就能判断
内网测试机图省事关掉防火墙可以理解,公网服务器还是老实放行端口。centos关闭防火墙这条命令网上一搜一大把,真正麻烦的是关完发现另有原因。