在阿里云上部署网站,80端口基本绕不开。HTTP默认走80端口,Nginx、Apache或Node.js应用要对外提供网页,通常都得让它能被外网访问。很多人第一次部署时,程序已经跑起来了,浏览器输入公网IP却一直转圈,问题多半就出在80端口上。下面用一个实际案例,把从放行到排查的顺序理一遍。

一个常见的卡点
一位做小型电商的朋友在阿里云ECS上用Ubuntu部署了商城系统,Nginx也配好了。他在服务器上用curl访问localhost,页面能正常返回,但从外网打开公网IP,页面一直打不开。他先怀疑代码,折腾了大半天,最后在安全组里发现只放行了22端口(SSH),80端口根本没开。
这类情况很常见。服务器内部能访问,说明应用本身没问题,但外网到服务器之间还隔着几层:阿里云安全组、服务器本机防火墙、应用自己的监听配置。按这个顺序往外查,比在代码里反复打转要快得多。
第一步:放行安全组
安全组是云服务器外层的访问控制。进入ECS控制台,找到实例绑定的安全组,在入方向添加一条规则:
- 协议类型:自定义TCP
- 端口范围:80/80
- 授权对象:面向所有访客的网站填0.0.0.0/0;只给内部用的,填办公网络的IP段
规则保存后,用浏览器或curl访问一次公网IP,确认能否打开。仍然不通,再往下查。
第二步:检查本机防火墙
Ubuntu上常用ufw,CentOS或Alibaba Cloud Linux则多用firewalld。以ufw为例:
sudo ufw allow 80/tcp
sudo ufw status
firewalld环境下,执行firewall-cmd –permanent –add-port=80/tcp,然后执行firewall-cmd –reload让规则生效。漏掉–reload是常见失误。命令不报错,规则却没生效,排查时很容易忽略。
第三步:确认80端口有进程在监听
执行ss -tlnp | grep :80,看看谁占用了80端口。最常见的冲突是系统自带的Apache,或之前装过的面板软件。这种情况下Nginx可能启动失败,而且报错不一定醒目。如果Nginx没有起来,可以执行nginx -t检查配置,再查看/var/log/nginx/error.log。找到占用进程后,停掉多余的服务,或者改掉其中一方的监听端口。
为什么80端口会涉及权限
Linux里1024以下的端口属于特权端口,普通用户无法直接绑定。所以Nginx一般以root身份启动主进程去绑定80端口,再通过配置让工作进程降权运行。如果自己写的Node.js或Python服务想直接监听80,却用普通用户启动,就会报权限错误。更省事的做法,是让应用监听3000之类的高位端口,再用Nginx反向代理到80端口。这样应用不需要额外权限,域名和证书也方便统一管理。
备案:国内服务器绕不开的限制
如果服务器位于中国内地并绑定了域名,80端口还有一层限制。阿里云通常会对未完成ICP备案的域名拦截80和443端口,访问时会看到提示页面。这是合规要求,不是技术故障,改配置没有用。需要在阿里云备案系统提交材料,审核通过后才能正式对外提供服务。备案期间可以先用公网IP做内部测试,但正式上线前,备案必须完成。
几个容易踩的坑
- 安全组开了,本机防火墙还没开。两处都要检查,缺一不可。
- 用IP能打开,就以为域名也没问题。域名还要核对DNS解析是否指向这台服务器,以及备案状态是否正常。
- 把80端口改成8080之类的端口临时绕过。访问链接就得带端口号,用户体验会打折扣,不适合作为长期方案。
小结
阿里云80端口访问不通,基本可以按安全组、本机防火墙、端口占用、备案状态四个方向排查。先看安全组,再用命令确认本机监听,最后核对域名解析和备案。大多数问题在前两步就能定位。