网站部署到阿里云ECS后,用浏览器访问公网IP却打不开页面,这种情况很常见。多数时候问题出在80端口。HTTP默认走80端口,官网、接口和静态资源基本都靠它对外提供服务,端口不通,页面自然出不来。下面通过一个案例,说明阿里云80端口该怎么开,以及访问不通时先看哪里。

先搞清楚80端口在做什么
服务器上的应用靠端口区分不同的服务。HTTP默认使用80端口,HTTPS默认使用443端口。在浏览器里输入不带端口号的网址,请求实际会落到服务器的80或443端口上。
这里有个容易忽略的地方。服务进程在本机监听了端口,只说明服务器内部能接收请求。外部用户要访问到它,请求还得依次穿过安全组和操作系统防火墙。任何一层拦住了,页面都打不开,看起来却像网站本身出了问题。
开放80端口的三个步骤
下面的步骤适用于大多数阿里云ECS实例。开始前先确认实例处于运行中状态。
- 配置安全组入方向规则。登录阿里云控制台,进入云服务器ECS,找到目标实例绑定的安全组,在入方向添加一条规则:协议类型选TCP,端口范围填80/80,授权对象按实际需要填写。如果确实要对所有人开放,可以填0.0.0.0/0,但要清楚这意味着任何来源的IP都能访问该端口。
- 确认服务在监听80端口。在服务器上执行 ss -lntp | grep :80。如果没有输出,说明Nginx、Apache或应用本身没有在80端口启动,这时应先检查服务配置,不必急着改防火墙。
- 检查系统防火墙。使用firewalld的系统执行 firewall-cmd –permanent –add-port=80/tcp,再执行 firewall-cmd –reload 使其生效;使用ufw的系统执行 ufw allow 80/tcp。
三步做完,可以在本地电脑执行 curl -I http://公网IP。只要返回HTTP状态码,就说明请求已经到达服务,端口是通的。如果一直超时或连接被拒绝,就回到前面的步骤逐项核对。
案例:安全组已放行,页面还是打不开
一个小团队在阿里云上部署了基于Nginx的官网,系统是Alibaba Cloud Linux。运维同事在安全组里加了80端口的入方向规则,浏览器访问却一直超时。
他们按顺序排查。先在服务器上执行 ss -lntp,确认Nginx在监听80端口,服务未启动的可能就排除了。接着看防火墙,firewalld在运行,但没有放行80端口。补上规则并重新加载后,本地curl依然超时。最后回到控制台核对,问题才显现:实例绑定的安全组和他们修改的并不是同一个。把实例加入正确的安全组后,访问恢复正常。
这个过程说明,端口不通很少是单点问题。改对了一处,不代表链路上别的地方就没问题。排查时最好从服务、系统防火墙、安全组、实例归属几个层面逐一确认,每层确认后再进入下一层,别改完一处就认为已经完成。
访问不通时常见的几种原因
下面几类原因出现得最多,可以逐一对照。
- 安全组没有生效。规则加在了别的安全组里,或者实例根本没有绑定目标安全组。直接查看实例详情里的安全组信息,比翻规则列表更快。
- 服务没有监听80端口。Nginx配置里的listen指令写错,或者80端口已被其他进程占用。用ss命令看一眼就能确定。
- 系统防火墙拦截。firewalld、ufw或iptables没有放行80端口。安全组放行了,系统防火墙仍可能挡住请求。
- 域名未完成备案。境内服务器通过域名对外提供网站服务,需要完成ICP备案。域名未备案时,通过域名访问80端口的请求通常会被拦截。
- 没有公网IP。实例未绑定公网IP或弹性公网IP,外部网络无法直接到达。
备案问题最容易被忽略。新购服务器或新域名接入时,最好提前在备案系统中提交信息,免得上线当天才发现域名打不开。
上线前的安全考虑
80端口传输的是明文HTTP数据,账号密码、会话信息都可能在传输过程中被中间人截获。正式上线的网站,建议同时开放443端口,配置SSL证书,并在Nginx中把80端口的请求统一跳转到HTTPS。
另外,不建议长期对0.0.0.0/0开放SSH的22端口或数据库端口。安全组规则应遵循最小授权原则,只放行业务必需的端口和来源地址,不再使用的规则也要定期清理。
按这个顺序逐项检查,大多数访问问题都能较快定位。