connection-refused

连接被拒绝的定位与修复

现象

curl、ssh 或客户端立即报 Connection refused,不是等待超时。说明目标主机可达,但目标端口没有服务接受连接,或被防火墙明确拒绝。

快速定位

ss -lntp | grep ':<port>'
nc -vz <host> <port>
curl -v --connect-timeout 5 http://<host>:<port>/
systemctl status <service>
docker ps --format '{{.Names}}\t{{.Ports}}'
iptables -S
nft list ruleset

常见根因

  1. 服务没有启动,或启动后崩溃。
  2. 服务只监听 127.0.0.1,没有监听 0.0.0.0 或目标网卡。
  3. 端口写错、协议不匹配(HTTP 打到 HTTPS 端口)。
  4. 防火墙 REJECT、安全组拒绝或 SELinux 拦截。
  5. 容器端口没有映射,或映射到了错误的主机端口。

修复

相关命令

读完自测

合上页面,先回答,再展开对照。

  1. Connection refused 与连接超时在含义上有什么区别?
  2. 目标机本地 curl 127.0.0.1:<port> 正常、远端访问被拒,最可能是什么原因?
  3. 容器场景下应核对哪两处端口?
答案
  1. 被拒是立即返回,说明主机可达但端口没有服务接受连接,或被防火墙明确拒绝。超时则是另一种语义。
  2. 服务很可能只监听了 127.0.0.1。用 ss -lntp 确认监听地址是否为 0.0.0.0 或目标网卡。
  3. 确认 -p host:container 的映射与进程实际监听端口一致。容器没有映射到正确的主机端口也会被拒。