查一个域名的注册信息,多数人还在用两种办法:终端里敲 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——所以搜索时会同时撞见这两个名字,指的是同一个东西。
一、不是给 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 预览的地方,预览图会自动生成。
下面这张是我按官方 README 整理的查询链路与配套能力,一眼能看清数据怎么走、旁边挂了哪些东西:
三、部署:一个镜像、一个端口
官方在 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_ID | Moz API Access ID(域名指标用) | — |
MOZ_SECRET_KEY | Moz API Secret Key | — |
REDIS_HOST | Redis 地址,留空即关闭缓存 | — |
REDIS_PORT | Redis 端口 | 6379 |
REDIS_PASSWORD | Redis 密码 | — |
REDIS_DB | Redis 库索引 | 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。文中配图已去除站点叠加水印与推广信息;版权归原作者所有。


