本地起好项目,浏览器一打开就提示localhost拒绝了我们的连接请求,不同浏览器文案略有差别,有的写无法访问此网站。这句话意思很明确:地址是对的,但这个端口上根本没人接电话。
这句话到底说明什么
它表示TCP连接被直接拒绝,通常收到的是RST,也就是目标主机可达但端口没被监听。这和超时不一样,超时是对方不在或防火墙丢包,被拒绝是对方在线但那个门没开。先区分这两者,能少走很多弯路。
按顺序排查
- 服务起没起:控制台有没有报错退出,日志里有没有绑定失败。
- 端口对不对:前端默认5173,后端可能8080或3000,别访问错端口。
- 端口被占:别的进程先把端口占了,要么改端口,要么杀掉占用进程。
- 服务崩过:进程起十秒后自动退出,看着在跑其实已死,盯一眼控制台。
- 绑定地址:服务只监听了IPv6或只监听回环,换个写法访问试试。
协议和代理的干扰
有的项目是https但你用http访问,或者反过来,也会被拒。系统开了代理,本地请求被转发到代理服务器,代理当然连不上你本机的服务,把本地地址加进代理例外。IPv6优先的环境下,localhost可能先解析到IPv6地址,而服务只监听IPv4就被拒。
Windows上的两个绊脚石
一是IIS或某个系统服务提前占了80端口,你访问localhost不带端口时其实打到IIS上,看到的是它的默认页甚至拒绝。二是Windows防火墙首次运行程序时会弹允许访问网络的提示,点了取消,服务可能被挡。换端口和加放行规则都能解决。
确认服务在听的命令
Windows上执行netstat -ano看监听列表,Linux上用ss -lntp。看到监听地址是127.0.0.1只能本机访问,是0.0.0.0则可被外部访问。容器里跑的服务记得映射端口,没映射的话宿主机无论如何都连不上。