宝塔这东西最容易把人绕晕的地方就在这:防火墙不止一层,是三层叠着的,任何一层没通,外面就是超时。而且它们之间没有"先后顺序"的说法——不是开了A再开B,而是三层必须同时通,缺一个都不行。所以别纠结顺序,按从外到内挨个检查就行。
第一层:云厂商安全组(最容易漏、也是最常见的元凶)
阿里云 ECS 就在控制台 → 实例 → 安全组 → 配置规则 → 入方向,手动加规则:
- 协议类型选「自定义 TCP」,端口范围写
80/80,授权对象0.0.0.0/0 - 同理再加
443/443 - 宝塔面板端口(默认
8888,如果改过就填改后的),还有22别忘
如果你买的是轻量应用服务器,那防火墙不在安全组里,在轻量的控制台有个「防火墙」页,一样的加。很多人 ECS 和轻量搞混,跑去看安全组发现根本没有服务器,就是这个原因。
第二层:系统防火墙(就是你看到的宝塔「安全」页面)
宝塔「安全」页面加端口,本质就是在调系统的 firewalld / ufw,跟你手动敲命令是一个效果,不用两边重复操作。不过宝塔有时会抽风没写进去,稳妥点 SSH 敲一下确认:
firewall-cmd --list-ports
没有就补:
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --reload
Ubuntu 系是 ufw allow 80/tcp,敲完 ufw status 看一眼。注意别把 firewalld 关掉就完事,关了确实通,但服务器裸奔,不值当。
第三层:确认 Nginx 真的在监听
上面都放行了还超时,就回来查服务本身:
ss -lntp | grep 80
正常的输出是 0.0.0.0:80 或者 :::80。如果只有 127.0.0.1:80,那外网永远进不来,得去站点配置文件里把 listen 改成 80。顺便 curl -I http://127.0.0.1 看本地能不能出 200,本地都不行那就是 Nginx 或站点配置的问题,跟防火墙无关了。
外网实测
别自己浏览器反复刷新,用在线端口检测工具(站长工具的端口扫描、或者随便一个在线 telnet)从外部扫你的公网 IP 的 80 端口。能连通就是通的,超时就是还有一层没开。这个比瞎猜快十倍。
几个特别阴间的坑,顺手提一下:
- 备案。这个是最多大佬都翻车的:阿里云大陆节点的服务器,域名没备案,80/443 会被直接阻断,表现就是解析正常、Nginx 正常、端口全开,但就是打不开或者跳一个提示页。如果你域名还没备案,先用
公网IP:端口测,能通说明就是备案问题,赶紧去备案。 - 面板 8888 打不开,除了安全组,还要看面板有没有绑定 IP 限制、有没有开面板 SSL(https 才能进)、面板端口是不是被改过。SSH 里
bt default能看面板地址和端口。 - 同一台机器上有多个站点时,某个站点的
server_name写错了,请求会落到默认站点上去,也会以为"打不开"。
一句话总结排查线:外网扫端口 → 不通就查阿里云安全组 → 再查 firewalld/ufw → 再查 ss -lntp 看监听 → 最后怀疑备案和域名解析。从外往内一层层剥,比按顺序"开放"靠谱得多。