OffVPS离岸 VPS支持

请求路径

跟踪一个请求从 DNS 到您的应用。

让同一请求依次经过每一层,并在第一个意外结果处停止。进程正常工作并不意味着其公共主机名正常工作,而 DNS 更改也无法修复从未启动的应用程序。

OffVPS 现场指南 · 已审核 · 5 分钟阅读

写下您预期的路由

本演练假设您管理一台 Linux VPS、一个正常工作的 SSH 会话、一个带有无害 /healthz 端点的应用程序,并且能够访问您控制的域名的权威 DNS 设置。示例应用监听 127.0.0.1:3000;Caddy 是公共反向代理。如果您的应用使用不同的监管程序或代理,请保持诊断顺序并使用其文档。

api.example.com203.0.113.10 是文档占位符,并非实时服务。在对您自己的系统运行检查之前,请同时替换两者。将真实主机名、预期 IP 地址、应用端口和服务名称记录在一个地方。在配置器中设置 VPS 主机名不会创建公共 DNS 记录。

  1. DNS 返回预期地址。
  2. 连接到达预期服务器和端口。
  3. TLS 对请求的主机名进行身份验证。
  4. 代理将请求转发到正确的上游。
  5. 应用程序返回预期响应。

检查两种地址族

从 VPS 外部的机器查询您打算发布的记录。 dig 属于 BIND 的 DNS 工具;软件包名称各不相同。这些命令请求应答部分,以便您查看记录类型、地址和剩余缓存生存时间。参见 BIND dig 参考.

dig api.example.com A +noall +answer
dig api.example.com AAAA +noall +answer

将每个返回的地址与您的预期目标进行比较。仅当 IPv6 路由、监听和过滤对该地址有效时,才发布 AAAA 记录。旧的 AAAA 记录可能会使某些客户端前往与 A 记录不同的位置。如果您有意使用 CDN 或 DNS 代理,其地址可能是正确的;请记录该额外跳转,而不是假定必须显示 VPS。

空白答案需要更仔细地查看完整的 dig 响应:它可能表示没有该类型的记录、名称不存在或解析问题。在编辑之前,请检查哪个 DNS 服务是权威的。记录旧值和 TTL,在那里进行预期更改,然后在现有缓存过期后比较新结果。重复的无关编辑会使时间线更难理解。

区分连接失败与证书失败

从服务器外部请求小型端点。使用 GET,而不是假设您的应用程序实现了 HEAD。Curl 的超时选项会限制检查;其详细输出显示连接和 TLS 进度。 Curl 记录了这些选项和证书验证.

curl --verbose --connect-timeout 5 --max-time 10 https://api.example.com/healthz

解析错误指向 DNS。连接被拒绝意味着连接被主动拒绝;超时可能涉及路由或过滤,且无法确定是哪个防火墙导致的。证书错误意味着预期的安全连接未建立。不要将禁用证书检查作为您的永久修复。

要在 TLS 请求中保留主机名的同时比较特定源站,请使用 curl 的地址覆盖:

curl --verbose --connect-timeout 5 --max-time 10 --resolve api.example.com:443:203.0.113.10 https://api.example.com/healthz

如果普通请求失败而此请求成功,请比较 DNS 和任何中间环节。此覆盖不会编辑 DNS。当 A 和 AAAA 记录同时存在时,请从实际支持相应网络的客户端重复普通请求,使用 --ipv4--ipv6 来自实际支持相应网络的客户端。

检查连接的服务器端

在 VPS 上,检查监听的 TCP 套接字并直接查询应用:

sudo ss -ltnp
curl --silent --show-error --max-time 5 http://127.0.0.1:3000/healthz

ss 显示监听者,并在权限足够时显示其进程。回环监听器可在本地访问;仅其存在并不能说明外部访问情况。请查阅 上游 ss 手册。如果直接应用请求失败,请转到 进程诊断指南 再更改 DNS。

对于此单应用布局,相关的 Caddyfile 块为:

api.example.com {
    reverse_proxy 127.0.0.1:3000
}

主机名和上游必须与您的应用匹配。Caddy 的 反向代理指令 将请求转发到配置的上游;在此处放入任意域并不会让您控制它。编辑前请保留现有配置。对于打包服务和此文件路径,请先验证,仅在验证成功后重新加载:

sudo caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
sudo systemctl reload caddy

这些命令用途不同:验证检查配置加载,而重新加载应用更改。请检查已安装服务的实际文件路径和权限。 Caddy 的命令参考 说明了验证和重新加载行为。

验证完整路径,然后保留证据

对于普通公共证书自动化,Caddy 需要正确的 DNS、可外部访问的质询端口、绑定其监听器的权限以及持久可写的证书存储。HTTP 和 TLS-ALPN 质询分别使用端口 80 和 443;DNS 质询是单独的设置。请参阅 Caddy 的 HTTPS 先决条件。审查防火墙规则时,请保持管理访问不受影响。

示例结果: 本地端点返回 {"status":"ok"},外部 HTTPS 请求返回相同的小响应体,并且 curl 报告证书验证成功。这些是该示例的预期观察结果,而非来自 OffVPS 服务器的记录结果。还要执行一个正常的应用操作:浅层健康端点可能通过,而依赖数据库的路由可能失败。

记录请求时间、主机名、地址族和首个失败层。这份简报比“域坏了”更有用。路径正常工作后,请使用 可重复发布指南 让相同的检查成为每次部署的一部分。

使用的文档

本页的主要参考资料。检查您自己环境中安装版本的文档。