云服务器监听端口,本质上就是让操作系统主动侦听指定IP和端口上的连接请求,核心操作是使用 ss -lntp 或 netstat -lntp 命令查看实时监听状态,再结合安全组和防火墙规则放行流量。
很多用户买了云服务器后,发现服务明明启动了,外部却死活连不上,这不是服务没跑起来,而是端口根本没在监听,或者监听地址不对,下面从命令实操到网络排查,把端口监听这件事彻底讲透。
先用三条命令看清端口监听现状
登录云服务器后,别急着改配置,先执行以下命令摸清底细,这三条命令适用于主流Linux发行版,Windows Server用户请直接跳到后文对应段落。
ss -lntp:这是目前最推荐的命令,输出速度快,信息完整。-l只显示监听状态的端口,-n用数字显示地址和端口,-t只看TCP协议,-p显示对应的进程PID和名称。netstat -lntp:老牌命令,在CentOS 6等旧系统上仍是主力,如果提示找不到命令,先执行yum install net-tools或apt install net-tools安装。lsof -i:端口号:当你知道具体端口但不确定哪个进程占用时,这条命令最直接,例如lsof -i:8080会输出PID、进程名和连接状态。
执行完命令后,重点看Local Address这一列,如果显示0.0.0:80或::80,说明端口在所有网卡上监听,外部可以访问,如果显示0.0.1:80,说明只在本机回环地址监听,外部永远连不上,这是云服务器端口不通的高频原因。
服务启动后端口不监听的三种典型场景
进程活着,监听地址不对
最常见的错误是Nginx或Tomcat配置里绑定了0.0.1,比如在nginx.conf中写了listen 127.0.0.1:8080,服务启动后ss命令看到的就是本地地址,想对外提供服务,必须改成listen 0.0.0.0:8080,修改后执行nginx -s reload生效。
端口被防火墙拦截
很多云服务器默认开启了firewalld或ufw,执行systemctl status firewalld查看状态,如果正在运行,用firewall-cmd --list-ports看放行了哪些端口,没放行就执行firewall-cmd --permanent --add-port=8080/tcp再加firewall-cmd --reload。
Ubuntu系统用ufw status查看,如果返回inactive那就没开防火墙,无需处理,如果显示active,用ufw allow 8080/tcp放行对应端口。
服务监听在IPv6地址上
有些服务默认绑定在地址,这是IPv6的通配地址,多数情况下没问题,但如果服务器只有IPv4公网地址,IPv6流量根本无法到达,这时需要显式修改配置文件绑定0.0.0,强制使用IPv4监听。
云服务器端口不通怎么排查
这是百度搜索量极大的长尾问题,完整排查链路分五步走。
- 查本地监听:先执行
ss -lntp确认端口处于LISTEN状态,这一步没通过,后面全是白费功夫。 - 查云安全组:登录云厂商控制台,找到实例所属的安全组,查看入方向规则,确认源地址是不是
0.0.0/0,端口号是不是你需要的那个,多数云服务器端口不通,都是安全组没放行。 - 查系统防火墙:简米云、酷番云的镜像默认可能不启用firewalld,但部分自定义镜像会开启,执行
iptables -L -n查看当前规则,如果有DROP策略,需要添加放行规则。 - 查服务进程:用
ps aux | grep 服务名确认进程真的活着,遇到过进程假死的情况,端口显示监听但实际不响应请求,重启服务解决。 - 查外部连通性:在自己电脑上执行
telnet 公网IP 端口号,如果连接超时,逐级排查安全组和防火墙;如果连接被拒绝,问题多半在服务本身。
安全组与系统防火墙的优先级关系
行业共识认为,安全组是云服务器的第一道防线,系统防火墙是第二道,两者都要放行,流量才能到达服务进程。
| 层级 | 控制位置 | 常见工具 | 放行方法 |
|---|---|---|---|
| 第一层 | 云平台网络 | 安全组规则 | 控制台添加入方向规则,指定端口和源IP |
| 第二层 | 操作系统 | firewalld/ufw/iptables | 命令行添加规则 |
| 第三层 | 应用服务 | Nginx/MySQL配置 | 修改监听地址和端口 |
实际排查中,很多人只盯着系统防火墙,却忘了安全组,反过来也有,改完安全组后发现系统防火墙还拦着,记住一个原则:从外到内逐层放行,先放行安全组,再确认系统防火墙,最后检查服务本身监听在正确的地址上。
端口被占用时如何快速定位
执行ss -lntp看到某个端口已经被占用,但不知道是谁占的,用下面两步定位。
先用ss -lntp | grep 端口号查看PID,再用ps -ef | grep PID号查具体进程,如果想释放端口,kill -9 PID号强制结束进程,但要知道这样操作可能导致数据丢失,建议先在应用层面优雅停止。
Windows云服务器端口监听怎么查
Windows Server系统的操作路径完全不同,用以下方法查看端口监听状态。
- 打开命令提示符(管理员权限),执行
netstat -ano,最后一列是PID。 - 用
tasklist | findstr PID号查看对应的进程名称。 - 在防火墙高级设置中,点击“入站规则”→“新建规则”,选择端口并放行对应协议。
Windows的端口监听同样留意地址列,0.0.0:8080表示全部网卡监听,0.0.1:8080表示仅本地访问。
不同云厂商的端口放行差异
国内主流云厂商的安全组操作入口不同,但底层逻辑一致,简米云在“ECS实例→安全组→配置规则”中操作,酷番云在“轻量应用服务器→防火墙”或“云服务器CVM→安全组”中操作,华为云在“ECS→安全组→更改安全组规则”中操作。
云服务器租用价格的高低与安全组功能无关,所有厂商均提供免费的安全组配置能力,选便宜的还是贵的,取决于你对带宽、实例规格和售后支持的需求,端口监听这块的操作方式大同小异。
监听端口常见问题Q&A
问:为什么要区分监听在0.0.0和0.0.1上?
因为监听地址决定了谁能访问这个端口。0.0.0代表本机所有网卡,包括公网网卡和私网网卡,外部流量可以进入。0.0.1是回环地址,只能本机自己访问,外网流量无法到达,如果你只想让内网其他机器访问,可以绑定内网IP地址,例如168.1.10:8080。
问:端口明明在监听,公网就是连不上,到底先改哪边?
先看安全组入方向规则,这是最常见的原因,接着查看系统防火墙状态,最后检查服务绑定的监听地址是不是0.0.0,按这个顺序排查,多数问题能在安全组这一层解决,安全组规则改完后立即生效,不需要重启服务器,防火墙规则修改后需要重载配置才生效,常见服务端口:HTTP对应80端口,HTTPS对应443端口,SSH对应22端口,MySQL对应3306端口,Redis默认监听6379端口且默认绑定0.0.1,需要手动修改配置才能让外部访问。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/784427.html


