查一个域名的注册信息,多数人还在用两种办法:终端里敲 whois,或者去注册商网站翻那个塞满广告的查询页。前者输出是一大坨没格式的纯文本,后者得先关掉三个弹窗。Next Whois UI 想解决的就是这点不舒服——把 WHOIS / RDAP 查询做成一个干净、能自己托管的 Web 界面,顺手把 API 也开放出来。
它基于 Next.js 14 构建,仓库在 GitHub(zmh-program/next-whois),官方镜像发布在 Docker Hub 的 programzmh/next-whois-ui,MIT 协议,作者还跑了演示站 who.zmh.me。这次的入口是镜像页,所以文章重点放在「怎么把它跑起来」和「跑起来之后能做什么」。
不只是给 whois 套了层壳
如果只是把命令行输出塞进网页,意义不大。它真正省事的地方在于查询策略与结果整理:
- RDAP 优先、WHOIS 回退:先走结构化的 RDAP,拿不到或不支持时自动退回传统 WHOIS,结果合并后一起展示,原始响应文本也保留可查。
- 查询对象不止域名:域名、IPv4、IPv6、ASN、CIDR 都能查,IP 归属、AS 信息这类排查场景一并覆盖。
- EPP 状态码说人话:
clientTransferProhibited之类的状态给出可读解释,并附 ICANN 参考链接,不用再去搜缩写。 - 品牌识别:自动识别常见注册商与域名服务器厂商并配上图标;卡片上直接给出注册时间、到期时间、剩余天数、DNSSEC 状态。
- 原始文本不丢:界面里能切到 Whois / RDAP 原始响应,便于复制、存档或核对。
界面本身是 Shadcn UI + Tailwind CSS,响应式适配手机、平板、桌面,支持 PWA 安装,深浅色主题跟随系统也可手动切;本地历史记录支持搜索、筛选和键盘快捷键。国际化做了英语、简中、繁中、德、俄、日、法、韩八种语言。
顺手把结果变成能分享的图
比较有意思的是 /api/og:用 Satori 在服务端把查询结果渲染成一张 Open Graph 卡片。域名、注册年限、创建/更新时间、到期剩余、EPP 状态、Name Servers、DNSSEC 都排在一张图里,分享到聊天或文档时比截图体面。它同时是「动态 OG 图」这个特性本身——把链接丢进支持 OG 预览的地方,会自动出图。
下面这张是我按官方 README 整理的查询链路与配套能力,方便一眼看清数据怎么走、旁边挂了哪些东西:
一条命令起一个站
官方镜像最省事的用法:
docker run -d -p 3000:3000 programzmh/next-whois-ui
容器起来后浏览器打开 http://localhost:3000 即可。README 里另外两条路是云平台一键部署(Vercel / Netlify / Zeabur),以及源码部署:
git clone https://github.com/zmh-program/next-whois-ui
cd next-whois-ui
pnpm install
pnpm dev
源码方式适合要改界面或改站点信息的场景。这里有个容易踩的点:NEXT_PUBLIC_ 开头的那几个变量属于 Next.js 的客户端变量,通常在构建阶段就被内联进产物,镜像已经构建好的情况下运行时再传 -e 未必生效。想改站点标题、描述、关键词,最稳的是源码部署时写进 .env 再 pnpm build;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 属于可选增强,没密钥不影响主功能。
两个开放接口
# 查询(并行请求并合并结果,含原始响应)
curl "http://localhost:3000/api/lookup?query=example.com"
# 生成动态 OG 图
curl -o card.png "http://localhost:3000/api/og?query=example.com"
项目还内置了 /docs 页面,带交互式 API 示例,不用另外翻文档站。技术栈是 Next.js 14 的 Pages Router(OG 图走 Edge Runtime)、Whoiser 加 RDAP client、Satori / next/og 出图,UI 用 Shadcn UI 与 Tailwind CSS。
我的一点判断
这类工具的价值不在「能查」,而在「查完能读、能分享、能接进自己的流程」。域名玩家、运维和安全排查、需要批量核对资产归属的人,用自建页面比命令行舒服很多;/api/lookup 让脚本或内部系统能直接复用,/api/og 则省掉了截图存档这一步。
几个上线前要想清楚的点:WHOIS 与 RDAP 数据来自上游注册局和注册商,各家格式与限流策略不一致,结果应以官方数据源为准;公开部署后 /api/lookup 等于一个免费查询接口,最好加访问控制或速率限制,别让上游把自己封了;Redis 别暴露到公网,Moz 密钥只放服务端;真要做品牌化页面,走源码部署改 NEXT_PUBLIC_* 比在容器上硬塞环境变量靠谱。
小结
一个镜像、一个端口、MIT 协议,换来一个无广告、深浅色都能看、还能当 API 用的 WHOIS / RDAP 查询站。对只需要偶尔查一次的人来说命令行也够;但如果你经常要查、要分享结果、或者要把它接进内部工具,这套自建方案比到处找在线查询站省心得多。
本文整理自公开资料并做重写,原始出处:https://hub.docker.com/r/programzmh/next-whois-ui。文中配图已去除站点叠加水印与推广信息;版权归原作者所有。


