返回首页

线上服务端口连不上?完整排查指南(从进程到客户端)

📅 创建于 2026-06-04 🔄 更新于 2026-06-04 📝 591 字

线上服务端口连不上?完整排查指南(从进程到客户端)

来源:刘军军 | 发布日期:2026-06-01

三种报错快速定位

报错 含义 优先排查方向
Connection refused 端口没在监听,或被 iptables REJECT 服务是否启动、端口是否监听
Connection timed out 数据包被丢弃了 防火墙 DROP 规则、云安全组、网络路由
No route to host 网络层不通 路由、网卡状态、跨网段配置

排查主流程(从内到外)

服务进程 → 端口监听 → 本机防火墙 → 云安全组 → SELinux → 网络路由 → DNS

一层一层排,哪层断了就在哪层修。

第一步:确认服务进程

# 查看进程
systemctl status nginx      # 显示 running/failed/dead
ps aux | grep java

# 服务没起来?看启动日志
journalctl -u nginx -n 100 --no-pager
tail -n 100 /var/log/syslog

常见失败原因:配置文件语法错误、端口被占用、权限不足(1024 以下端口需 root)、依赖服务未启动。

第二步:确认端口监听

# 查看监听状态
ss -tlnp | grep 8080
netstat -tlnp | grep 8080

监听地址的坑——最常见的翻车点:

监听地址 含义
0.0.0.0:8080 所有网卡,外部可访问 ✅
127.0.0.1:8080 只有本机能访问 ❌
::1:8080 IPv6 回环,外部无法访问 ❌

本机自测排除网络因素:curl http://127.0.0.1:8080nc -zv 127.0.0.1 8080。本机通、外部不通 → 问题在防火墙或网络层。

配置修改示例:

服务 配置 改法
Nginx listen 80; 即 0.0.0.0:80 listen 0.0.0.0:80;
Spring Boot application.properties server.address=0.0.0.0
MySQL my.cnf bind-address = 0.0.0.0
Redis redis.conf bind 0.0.0.0

第三步:本机防火墙

firewalld(CentOS 7+):

firewall-cmd --list-all                    # 看当前放行规则
firewall-cmd --permanent --add-port=8080/tcp && firewall-cmd --reload   # 永久放行(必须加 --permanent)
firewall-cmd --remove-port=8080/tcp        # 关闭端口

iptables(Ubuntu/底层):

iptables -L INPUT -n -v --line-numbers     # 看入站规则
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT   # 临时放行
# 默认策略是 DROP? → 注意 INPUT 链 policy

ufw(Ubuntu): ufw allow 8080/tcp && ufw reload

临时关闭防火墙测试(仅排查用):iptables -F && iptables -P INPUT ACCEPT,用完立即恢复。

第四步:云安全组

生产环境最易忽略的一层。安全组丢弃的数据包服务器根本看不到,tcpdump 也无输出。

# 判断方式:服务器上抓包
tcpdump -i eth0 port 8080 -nn
# 客户端发起请求后,tcpdump 无任何输出 → 安全组拦截了

阿里云 → ECS 实例 → 安全组 → 入方向规则 → 放行 TCP:8080/8080,授权对象 0.0.0.0/0。腾讯云/AWS 操作类似。

第五步:SELinux(CentOS/RHEL)

getenforce                              # Enforcing/Permissive/Disabled
grep denied /var/log/audit/audit.log    # 看有没有 SELinux 拦截
semanage port -a -t http_port_t -p tcp 8888   # 放行非标准端口

第六步:网络路由与 DNS

ip addr show     # 网卡状态和 IP
ip route show    # 路由表
ping -c 4 目标IP                          # ICMP 连通性
traceroute -T -p 8080 目标IP              # TCP 路由追踪
nslookup yourdomain.com                   # DNS 解析
cat /etc/hosts                            # hosts 覆盖

速查清单

  1. systemctl status 服务名
  2. ss -tlnp | grep 端口号
  3. curl http://127.0.0.1:端口
  4. firewall-cmd --list-all / iptables -L INPUT -n -v
  5. tcpdump -i eth0 port 端口 -nn(看包是否到服务器)
  6. getenforce + grep denied /var/log/audit/audit.log
  7. lsof -i :端口(查端口占用)
  8. ip route show / traceroute
  9. nslookup 域名(域名访问时)

常用命令速查

目的 命令
查进程 ps aux | grep 服务名
查端口监听 ss -tlnp | grep 端口
本机测试 nc -zv 127.0.0.1 端口
查防火墙规则 firewall-cmd --list-all
查 iptables iptables -L INPUT -n -v
抓包验证 tcpdump -i eth0 port 端口 -nn
查 SELinux getenforce
查端口占用 lsof -i :端口
追踪路由 traceroute -T -p 端口 目标IP
查服务日志 journalctl -u 服务名 -n 100

真实案例

案例一:Spring Boot 只监听了 127.0.0.1 本机 curl 通、外部超时。ss -tlnp 看到 127.0.0.1:8080。修复:server.address=0.0.0.0

案例二:firewalld 重启后规则丢失 之前用 --add-port(临时),重启后失效。须用 --permanent --add-port

案例三:云安全组未放行 服务器 tcpdump 收不到包。登录云控制台入方向添加 TCP 端口放行。

案例四:SELinux 阻止 Nginx 绑定 8888 端口 journalctlPermission deniedaudit.log 有 denied 记录。semanage port -a -t http_port_t -p tcp 8888 解决。

案例五:端口被僵尸进程占用 lsof -i :8080 发现残留进程,kill -9 后重启。


关联页面

页面关联点
network-troubleshooting-order服务器网络排障方法论(七步法)
fullstack-performance-troubleshooting全栈性能排障
container-networking-troubleshooting容器网络排障
journalctl-log-tracking-guidesystemd 日志管理
linux-essential-commands-referenceLinux 命令速查
network-packet-loss-troubleshooting网络丢包排查全链路指南:从 ping 到 tcpdump 逐层排查,含物理/逻辑丢包区分、8 步排查
nginx-config-pitfallsNginx 配置踩坑