服务器上的网站部署好了,浏览器输入公网IP却打不开,这种情况在阿里云用户里很常见。很多人第一反应是服务挂了。其实阿里云80端口不能访问的原因分散在几层:云端安全组、服务器自带的防火墙、Web服务配置,还有备案拦截。下面按从内到外的顺序,给出可以直接照着做的排查步骤。

先看一个例子
有个做在线教育的小团队,在阿里云ECS上用Nginx部署了前端页面。部署完,同事在本地用浏览器访问公网IP,一直超时。他们先重启了Nginx,又重装了证书,还改了域名解析,问题没有消失。
后来运维同事登录服务器执行curl -I http://127.0.0.1,返回200,说明Nginx本身没问题。问题出在外部访问那一段。检查安全组才发现,这台实例只放行了22端口(SSH)和3306端口(MySQL),80和443从来没加。补上入方向规则后,页面马上能开。所以遇到这类问题,先确认服务在本机正常,再一层层往外查,会更省时间。
第一步:确认服务在本机正常监听
在怀疑云端配置之前,先登录服务器,确认Web服务真的在监听80端口。依次执行下面几条命令:
- 查看端口监听:
ss -tlnp | grep :80。正常会看到nginx或httpd监听在0.0.0.0:80或:::80上。如果进程不是你预期的服务,说明80端口可能被别的程序占了,比如之前残留的Apache或测试程序。这时要先停掉占用者,否则Nginx可能启动失败。 - 本机访问测试:
curl -I http://127.0.0.1。能返回HTTP状态码,说明服务本身是通的。 - 检查服务状态:
systemctl status nginx,确认状态为active(running)。
还有一个容易踩的坑:Node.js或Java应用默认可能只绑定localhost。这种情况下本机curl能通,外部却访问不了。把应用配置改成监听0.0.0.0,或者在前面加一层Nginx反向代理,都能解决。
第二步:检查阿里云安全组
安全组是阿里云ECS最常见的拦截点。可以把它理解成实例前面的一道虚拟防火墙,默认只放行少数端口。登录ECS控制台,进入实例详情页,找到“安全组”,查看入方向规则,重点确认以下几点:
- 入方向是否有TCP 80端口的放行规则。
- 授权对象是否正确。填0.0.0.0/0表示所有公网地址都能访问;填了固定IP段,就只有这段地址能进。
- 实例绑定的是不是那个配置了80端口的安全组。一台实例可以绑多个安全组,规则会叠加生效。但如果只绑了一个没配80端口的安全组,照样访问不了。
- 如果前面挂了负载均衡SLB,还要看SLB的监听端口是不是80,后端服务器组是否指向了正确的ECS实例和端口。
添加规则时,协议选TCP,端口范围填80/80,授权对象按业务来定。面向公众的网站一般选0.0.0.0/0。另外提醒一句:80端口本身风险不大,真正该收紧的是22和数据库端口,建议只对运维人员的固定IP开放。
第三步:排查服务器内部防火墙
安全组放行了,系统自带的防火墙仍可能拦住流量。CentOS和Alibaba Cloud Linux一般用firewalld,Ubuntu和Debian常见的是ufw,也有直接用iptables的。
- firewalld:执行
firewall-cmd --list-all查看已放行的服务和端口。如果没有http,依次执行firewall-cmd --permanent --add-service=http和firewall-cmd --reload。 - ufw:执行
ufw status查看状态,放行80端口用ufw allow 80/tcp。 - iptables:执行
iptables -L -n --line-numbers查看INPUT链。留意有没有DROP或REJECT规则排在放行规则前面,排在前面的会先生效。
改防火墙规则本身可以撤回,但有个风险要注意:如果误操作把SSH断开,就只能通过阿里云控制台的VNC远程连接来恢复。所以改之前最好先备份,例如执行iptables-save > /root/iptables.bak。
第四步:核对Web服务配置
端口放行了、服务也在监听,但访问时返回错误页,或者直接断开,就该看Web服务的配置了。以Nginx为例,先执行nginx -t检查语法。然后看server块里的listen是不是80,server_name是否和你访问的域名一致。
如果一台机器上跑了多个站点,还要留意默认站点的顺序。请求的Host头和所有server_name都对不上时,Nginx会用第一个定义的server块来响应。结果就是你看到的可能是别的站点,甚至是默认欢迎页,很容易误以为是服务器的问题。
第五步:确认备案和域名解析
这一步很多人会漏掉。阿里云要求使用中国大陆地域服务器提供网站服务的域名完成ICP备案。如果服务器在大陆地域,域名又没有备案,80和443端口的HTTP访问会被拦下,用户看到的可能是一个备案提示页,而不是你的网站。
直接用IP访问也会碰到这个限制。解决办法有两个:完成备案,或者把服务器放在香港或海外地域,这些地域不需要备案就能正常使用80端口。备案需要一定时间,如果项目有上线时间要求,最好在规划阶段就提前办。
如果访问的是域名,还要确认解析记录指向了正确的公网地址。可以用nslookup 你的域名,或者用在线DNS检测工具看解析是否已经全球生效。刚修改过的记录可能要等缓存过期,这时等一等再测,通常比反复改配置更有用。
排查顺序
按下面的顺序一层层确认,基本不会在某一层来回折腾:
- 服务器本机能否通过127.0.0.1访问80端口。
- 服务是否监听在0.0.0.0或公网网卡上。
- 安全组是否放行80端口,授权对象是否正确。
- 系统防火墙是否放行HTTP流量。
- Web服务配置、虚拟主机和域名是否对得上。
- 域名是否已完成备案,解析是否生效。
大多数阿里云80端口访问问题,按这个顺序走一两轮就能定位。如果全部确认无误还是不通,可以用控制台“运维与监控”里的网络诊断工具,或者直接提工单,请技术支持帮忙查网络链路。比起反复改配置,逐层验证更稳,后续维护也更清楚。