跳到主要内容

主机资讯与使用指南

VPS 端口访问不了怎么排查:监听、Docker 与云安全组

从本机请求开始,逐层检查服务监听、容器端口、系统防火墙与云安全组。

先在 VPS 上访问服务

浏览器连不上应用,先确认程序自己能回应。下面用 3000 端口举例,换成实际端口。

curl -I http://127.0.0.1:3000
sudo ss -lntp

本机也无法访问时,优先查看应用状态和日志;本机正常而公网失败,再检查监听地址与访问规则。只监听 127.0.0.1 的服务,不能直接通过公网 IP 访问。

Docker 里正常,不代表端口已发布

sudo docker compose ps
sudo docker compose logs --tail=100

Compose 的 ports 左边是宿主机端口,右边是容器端口。127.0.0.1:3000:8080 表示外部不能直接访问宿主机 3000,需经过本机代理或 SSH 转发。

没有 ports 的容器仍可能在同一 Docker 网络中被其他容器访问;需要哪种访问方式,就配置对应入口,不必把每个内部服务都发布到公网。

云安全组与系统规则分别检查

云安全组控制平台入口,系统防火墙控制服务器规则,两处都可能影响连接。只开放实际需要的端口和来源,已有 SSH 会话不要为了排查而关闭所有规则。

Docker 发布端口可能绕过 UFW 的部分常规处理。检查 Docker 的端口发布和对应转发规则,不能根据 ufw status 一项就判断应用是否公开。

域名失败时看 DNS 和代理

IP 可访问但域名失败,检查 A、AAAA 和 CDN 设置。只配置正确 IPv4、却留下指向旧机器的 AAAA,可能导致部分客户端访问错误服务器。

反向代理 502 时,在代理所在环境访问上游。宿主机与容器的 localhost 含义不同,容器代理不要把自己的 127.0.0.1 当成宿主机应用。

最后从自己的电脑重新连接

修改后同时检查本机请求、域名访问和服务日志。HTTP 服务用浏览器或 curl;其他协议用对应客户端测试。TCP 能连接,只说明连接已建立,应用认证和业务响应还需要继续确认。

连接拒绝与连接超时分别查

Connection refused 通常表示目标到达后没有对应监听,或规则主动拒绝。先检查程序是否运行、监听端口是否正确,再看请求是否打到另一台机器。

Connection timed out 可能是过滤或网络路径问题。从服务器本地访问服务,再从外部访问公网地址,逐层比较云安全组、系统防火墙与容器映射。

IPv4 正常,但域名仍打不开

curl -4 -I https://app.example.com
curl -6 -I https://app.example.com

示例域名换成自己的服务。若只有 IPv6 失败,检查 AAAA 是否指向当前实例、服务器是否有可用 IPv6、应用是否监听以及规则是否放行。

未部署 IPv6 时删除不适用的 AAAA;只修 IPv4 安全组不会让旧 IPv6 地址正常。

Docker 外部端口和内部端口

docker compose ps
docker compose logs --tail=100

查看宿主机映射和服务启动日志。反向代理在宿主机时连接本地映射端口;反向代理与应用都在同一容器网络时连接服务名和容器端口。

应用映射为 127.0.0.1 后,公网不能直接访问该端口,这是本机代理方式的预期行为;应通过配置好的域名入口访问。

相关阅读