查一个域名的注册信息,多数人还在用两种办法:终端里敲 whois,或者去注册商网站翻那个塞满广告的查询页。前者吐出来一大坨没有结构的纯文本,后者得先关掉三个弹窗、再在一堆「立即续费」按钮里找创建日期。Next Whois 想解决的就是这点不舒服——把 WHOIS / RDAP 查询做成一个干净、可自托管、还能当接口用的 Web 界面,顺带把结果渲染成一张可以分享的卡片。

仓库在 GitHub 的 zmh-program/next-whois,MIT 协议,主语言 TypeScript(约 30 万行代码量),2024 年 7 月 23 日建仓,截至 2026 年 11 月约 596 星、141 个 fork、3 个未关闭 issue,一共 157 个文件,最近一次提交在 2026 年 3 月 4 日。作者还挂了演示站 who.zmh.me。有一个细节值得先说清楚:仓库已经改名成 next-whois,但 README 里的克隆地址、Docker 镜像名还是旧的 next-whois-ui——所以搜索时会同时撞见这两个名字,指的是同一个东西。

Next Whois 深色主题查询结果页:注册商、创建/到期/更新日期、EPP 状态、Name Servers 与原始 WHOIS 文本

一、不是给 whois 套了层壳

如果只是把命令行输出塞进网页,那意义不大。它真正省事的地方在查询策略和结果整理:

  • RDAP 优先、WHOIS 回退:先请求结构化的 RDAP,拿不到或不支持时自动退回传统 WHOIS,两路结果并行拉取后合并展示,原始响应文本也完整保留可查。源码里对应的是 rdap_client.ts 与 lookup.ts,解析交给 common_parser.ts。
  • 查询对象不止域名:域名、IPv4、IPv6、ASN、CIDR 五类都能查,IP 归属与 AS 信息这类排查场景一并覆盖。
  • EPP 状态码说人话:clientTransferProhibited 这种状态给出可读解释,并附 ICANN 参考链接,不用再去搜缩写。
  • 注册商与 NS 品牌识别:仓库里有一个 public/registrar-icons/ 目录,塞了几十家注册商和域名服务商的图标,识别出品牌后直接配图显示。
  • 顺手算钱:结果页顶部会给出该后缀的注册 / 续费 / 转移参考价(截图里 .org 是 5.62 / 9.8 / 9.5 美元),源码对应 src/lib/pricing/client.ts。这个价格来自第三方查询,只能当参考。
  • 原始文本不丢:界面能在 Whois / RDAP 两个标签间切换,看到的就是上游返回的原文。

界面是 Shadcn UI + Tailwind CSS,响应式适配手机、平板、桌面,支持 PWA 安装(仓库里有 pwa_installer.tsx 与 manifest.json),深浅色跟随系统也可手动切换;本地历史记录支持搜索、筛选和键盘快捷键(useSearchHotkeys.ts)。国际化做了英语、简繁中文、德、俄、日、法、韩八种语言,locales/ 下按语言各放一份 JSON。

二、结果本身也能变成一张图

比较有意思的是 /api/og:用 Satori 在服务端把查询结果渲染成 Open Graph 卡片。域名、注册年限、创建与更新时间、到期剩余天数、EPP 状态、Name Servers、DNSSEC 全排在一张图里,丢进聊天窗口或文档时比随手截图体面。它同时也是「动态 OG 图」这个功能——把链接贴到支持 OG 预览的地方,预览图会自动生成。

Next Whois 通过 /api/og 动态生成的域名信息分享卡片

下面这张是我按官方 README 整理的查询链路与配套能力,一眼能看清数据怎么走、旁边挂了哪些东西:

Next Whois 查询链路与配套能力示意图:输入查询 → RDAP 优先 → WHOIS 回退 → 结果合并展示

三、部署:一个镜像、一个端口

官方在 Docker Hub 上有现成镜像,最省事的方式就是跑一个容器,映射 3000 端口,起来后浏览器打开 http://localhost:3000 即可。除此之外 README 还给了一键部署到 Vercel / Netlify / Zeabur 的入口,以及源码运行方式(克隆仓库、pnpm install、pnpm dev)。源码方式适合要改界面、改站点信息、或者加自己的品牌页。

这里有个容易踩的点:NEXT_PUBLIC_ 开头的那几个变量属于 Next.js 客户端变量,一般在构建阶段就被内联进产物,镜像已经构建好的情况下运行期再传环境变量未必生效。想改站点标题、描述、关键词,最稳的是源码部署时写进 .env 再构建;REDIS_*、MOZ_* 这类纯服务端变量则可以在容器运行时注入。

变量作用默认值
NEXT_PUBLIC_SITE_TITLE站点标题Next Whois
NEXT_PUBLIC_SITE_DESCRIPTION站点描述—
NEXT_PUBLIC_SITE_KEYWORDS站点关键词—
NEXT_PUBLIC_HISTORY_LIMIT本地历史记录上限,-1 为不限-1
NEXT_PUBLIC_MAX_WHOIS_FOLLOW域名 WHOIS 最大跟随深度0
MOZ_ACCESS_IDMoz API Access ID(域名指标用)—
MOZ_SECRET_KEYMoz API Secret Key—
REDIS_HOSTRedis 地址,留空即关闭缓存—
REDIS_PORTRedis 端口6379
REDIS_PASSWORDRedis 密码—
REDIS_DBRedis 库索引0
REDIS_CACHE_TTL缓存有效期(秒)3600

Redis 是可选的:不填 REDIS_HOST 就完全不启用缓存,自己单机用没问题;对外提供服务建议配上,配合响应头里的 Cache-Control 能明显减轻上游查询压力。Moz 的 DA / PA / Spam Score 属于可选增强,没有密钥不影响主功能。

四、两个开放接口

查询接口是 /api/lookup?query=example.com,并行请求多路数据源、合并结果、回传原始响应;出图接口是 /api/og?query=example.com,直接返回一张 PNG。项目还内置了 /docs 页面,带交互式示例,不用另外翻文档站。

技术栈在 README 末尾列得很干脆:Next.js 14(Pages Router,OG 出图走 Edge Runtime)、Whoiser 加 RDAP client、Satori(通过 next/og)负责渲染图片、Shadcn UI 与 Tailwind 管界面。

五、上线前要想清楚的三件事

第一,数据以官方源为准。WHOIS 与 RDAP 的数据来自各注册局和注册商,格式、字段、限流策略都不统一,界面做的只是整理与解释,遇到争议仍要回到注册局记录。第二,公开部署等于开了一个免费查询接口,/api/lookup 最好加访问控制或速率限制,否则被刷的时候先被封的是你的服务器。第三,Redis 别暴露到公网,Moz 密钥只放服务端,前端变量只放无所谓公开的内容。

另外仓库 README 里列了两个社区分支 w.is 与 14.cx,都是同一套东西的二次改版,界面风格与本项目同源。这类分支与官方没有隶属关系,用之前自行判断数据与隐私策略。

六、适合谁

偶尔查一次域名,命令行其实够用。但如果你经常要查、要核对资产归属、要把结果发给别人看、或者想把查询能力接进内部工具,这套自建方案比到处找在线查询站省心:没有广告、深浅色都能看、手机能装成 PWA、还顺手给了 API。域名玩家、运维、安全排查这几个场景,基本都能直接用上。


本文整理自公开资料并重写:项目仓库 README、源码目录结构(src/lib/whois、src/pages/api、src/lib/pricing 等)、Docker Hub 镜像说明与演示站 who.zmh.me。仓库数据(星标、fork、issue、文件数、提交时间)截至 2026 年 11 月,具体数值以 GitHub 页面为准。配图取自仓库官方 banner 与项目自带的 OG 出图,另有一张依据 README 自绘的链路示意图;仅做格式统一、去元数据与尺寸压缩,未改动任何像素。README 首图、部署徽章、镜像拉取量、Star 趋势图与社群入口一律未收录。

本文整理自公开资料并做重写,原始出处:https://github.com/zmh-program/next-whois。文中配图已去除站点叠加水印与推广信息;版权归原作者所有。

Last modification:November 11, 2026
如果觉得我的文章对你有用,请随意赞赏