安全组放行了端口还是连不上?云服务器端口排查的完整链路

举报
yd_226757564 发表于 2026/11/06 10:05:43 2026/11/06
【摘要】 刚把服务部署到云服务器上,本地 curl 一下能通,换到自己的电脑上访问却连不上;安全组里明明已经放行了端口,换个端口还是一样。这种“明明都配了,就是不通”的问题,几乎每个用云服务器的人都遇到过。端口不通很少是玄学,它一定卡在某一个环节上。本文把一次访问要经过的完整链路拆开,按顺序逐个排查,帮你快速定位到底是哪一环拦住了请求。 一、先把链路画出来:一次访问要过五道关从你的电脑访问云服务器上的...

刚把服务部署到云服务器上,本地 curl 一下能通,换到自己的电脑上访问却连不上;安全组里明明已经放行了端口,换个端口还是一样。这种“明明都配了,就是不通”的问题,几乎每个用云服务器的人都遇到过。

端口不通很少是玄学,它一定卡在某一个环节上。本文把一次访问要经过的完整链路拆开,按顺序逐个排查,帮你快速定位到底是哪一环拦住了请求。

一、先把链路画出来:一次访问要过五道关

从你的电脑访问云服务器上的一个服务,请求依次经过:

  1. 客户端网络:你本地的网络、公司出口防火墙
  2. 云平台安全组:云上的虚拟防火墙,默认拒绝、按白名单放行
  3. 系统防火墙:服务器操作系统里的 firewalld、iptables 或 ufw
  4. 服务监听:服务是否真的在跑、监听在哪个地址和端口上
  5. 应用程序本身:服务收到请求后是否正常处理

排查的基本思路就是由内而外:先确认服务本身没问题,再一层层向外放开,最后从外部验证。顺序反了很容易白忙一场。

二、第一步:确认服务真的在监听

先登录服务器,看端口到底有没有被监听:

ss -tlnp | grep 8080

能看到类似 0.0.0.0:8080 的输出,说明服务在监听所有网卡;如果看到的是 127.0.0.1:8080,说明服务只监听了回环地址,只有本机能访问,从外面永远连不上。这是新手最常见的坑之一。

解决方法是改服务的监听地址:Nginx 改 listen 8080;、应用的配置文件里把 127.0.0.1 改成 0.0.0.0,然后重启服务。

如果 ss 里根本没有这个端口,先看服务跑起来没有:

systemctl status nginx
# 容器部署的服务看这里
docker ps | grep 8080

服务没启动、启动失败、端口被别的进程占了,都会表现为“端口不通”。

三、第二步:本机自测,先排除应用本身

在服务器本机上访问一次:

curl -v http://127.0.0.1:8080/
  • 本机能通,说明应用本身没问题,问题在网络或防火墙这一侧,继续往下查。
  • 本机也不通,那就不用去折腾安全组了,先看应用日志:journalctl -u nginx 或应用自己的日志文件,解决启动报错、配置错误、依赖缺失这类问题。

这一步的意义是把问题范围切成两半:应用问题还是网络问题。

四、第三步:查系统防火墙

很多系统默认开着防火墙,服务监听正常、本机能通,但外部请求在操作系统这一层就被拦下了。

# firewalld(CentOS / RHEL / EulerOS 常用)
firewall-cmd --state
firewall-cmd --list-all

# 放行端口后记得重载配置
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

# iptables
sudo iptables -L -n | grep 8080

# ufw(Ubuntu 常用)
sudo ufw status
sudo ufw allow 8080/tcp

注意一个细节:云服务器上安全组和系统防火墙是两道独立的关卡,只放行其中一道是不够的,两边都要放行。

五、第四步:查安全组,这是云上最容易踩的坑

在控制台找到这台云服务器绑定的安全组,逐项核对入方向规则:

  • 方向:放行的是入方向还是出方向?从外部访问服务,需要的是入方向规则。
  • 协议:Web 服务一般是 TCP,不要误选成 UDP。
  • 端口范围:写的是 8080 还是 8080-8080?不要把服务端口和源端口搞混。
  • 源地址:测试阶段可以用 0.0.0.0/0,正式使用建议按需收窄到可信地址段。
  • 生效范围:确认规则加在当前这台服务器绑定的安全组上,而不是另一台机器的安全组。

还有两个容易忽略的点:安全组规则一般是改完即时生效,不需要重启服务器;一台服务器可以绑定多个安全组,多个安全组的规则是并集关系,任意一个放行即可。

另外要分清访问地址:公网访问要用公网 IP 或绑定的弹性公网 IP,内网 IP 只能在云内网环境访问,拿着内网 IP 从家里访问是永远不通的。

六、第五步:从外部验证,分清“超时”和“拒绝”

回到自己的电脑上测试:

telnet 公网IP 8080
nc -vz 公网IP 8080
curl -v http://公网IP:8080/

两种失败现象指向完全不同的方向:

  • 连接超时(timeout):请求发出去没有回音,大概率是安全组或系统防火墙拦截,也可能是本地网络或运营商的问题。
  • 连接被拒绝(refused):包已经到达服务器,但对应端口上没有服务在监听,回去查第二步的监听地址和服务状态。

如果换一台机器、换一个网络(比如手机热点)就能通,问题可能出在你原来那台机器所在的网络出口上,而不是服务器。

七、常见坑速查表

现象 最可能的原因 先查什么
本机通、外面不通 安全组或系统防火墙未放行 安全组入方向规则、firewall-cmd
任何地方都不通 服务没启动或监听地址不对 ss -tlnp、systemctl status
telnet 提示 refused 服务未监听该端口 服务配置、监听地址 127.0.0.1
telnet 一直超时 防火墙拦截或地址错误 安全组、系统防火墙、公网 IP
换端口后还是不通 前面的环节没改对 按本文顺序从头重查一遍

八、推荐的排查顺序

  1. ss -tlnp 看服务是否监听、监听在哪个地址
  2. 本机 curl 127.0.0.1:端口,确认应用本身正常
  3. 查系统防火墙,放行对应端口
  4. 查安全组入方向规则,确认协议、端口、源地址和绑定关系
  5. 从外部 telnet 或 nc 验证,分清超时还是拒绝
  6. 还不行再看业务日志和本地网络

端口不通的问题,九成出在“监听地址、系统防火墙、安全组”这三处。按链路由内而外一层层缩小范围,大多数情况十几分钟就能定位,比反复重启服务、反复改配置要快得多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。