Next.js 本地 HTTPS + 自定义域名无法访问问题排查(Windows / mkcert / HSTS 完整指南)

在本地开发 Next.js 项目时,我们常常会配置自定义域名,例如:

复制代码
dev.local-app.test

并通过 Next.js 实验性 HTTPS 功能启动:

复制代码
"dev": "next dev --experimental-https -p 7777 -H dev.local-app.test"

但一个非常常见的问题是:


问题现象

✔ hosts 已配置:

复制代码
127.0.0.1 dev.local-app.test

✔ ping 正常:

复制代码
ping dev.local-app.test → 127.0.0.1

✔ Next.js 正常启动:

复制代码
Local: https://dev.local-app.test:7777

✔ 以下地址正常:

复制代码
https://127.0.0.1:7777
https://localhost:7777

❌ 自定义域名 HTTPS 失败:

复制代码
https://dev.local-app.test:7777
网络连接异常 / 网站服务器失去响应

关键验证步骤:curl

复制代码
curl -k https://dev.local-app.test:7777

返回正常内容:

bash 复制代码
/

✔ 返回正常内容 →

服务器没问题

Next.js 没问题

hosts 没问题

问题锁定:浏览器 HTTPS 校验


根因分析

Next.js 的:

复制代码
--experimental-https

内部使用的是:

mkcert 自签名证书

mkcert 机制:

✔ 自动生成本地证书

✔ 自动生成 Root CA

❌ 浏览器默认不信任



前置知识:mkcert 是什么?

mkcert 是一个本地开发专用工具,用于:

✔ 生成可信任的本地 HTTPS 证书

✔ 自动创建本地 Root CA

✔ 解决自签名证书不被浏览器信任问题

Next.js 实验性 HTTPS 本质上依赖 mkcert。


Windows 下 mkcert 未安装时的安装指南

如果执行:

复制代码
mkcert

提示:

复制代码
'mkcert' 不是内部或外部命令

说明 mkcert 尚未安装。


① 下载 mkcert

官方地址:

https://github.com/FiloSottile/mkcert

进入 Releases

下载:

复制代码
mkcert-vX.X.X-windows-amd64.exe

② 重命名(推荐)

将文件改名为:

复制代码
mkcert.exe

③ 放入 PATH 目录(推荐做法)

例如:

复制代码
C:\Windows\System32

复制代码
C:\Tools\mkcert\

若使用自定义目录:

需要加入 PATH


④ 添加 PATH(如需要)

系统环境变量 → PATH → 新增:

复制代码
C:\Tools\mkcert\

重启终端。


⑤ 验证安装

复制代码
mkcert -version

✔ 显示版本号 → 安装成功


安装 Root CA(核心步骤)

复制代码
mkcert -install

成功标志:

复制代码
The local CA is now installed in the system trust store! 👍

非常重要:完全关闭浏览器

✔ 刷新无效

✔ 必须彻底关闭 Chrome / Edge


为什么 localhost 可以访问?

浏览器对白名单地址特殊处理:

✔ localhost

✔ 127.0.0.1

自定义域名没有这个待遇。


Windows 下 mkcert "已安装但仍无效" 排坑指南


① 检查 Root CA 是否真的安装

Win + R →

复制代码
certmgr.msc

查看:

复制代码
Trusted Root Certification Authorities

应存在:

复制代码
mkcert development CA

② 清除 Chrome HSTS(非常常见)

复制代码
chrome://net-internals/#hsts

Delete domain:

复制代码
dev.local-app.test

③ 删除旧证书缓存(Next.js 高频坑)

删除:

复制代码
/certificates

重启 Next dev。


④ hosts 文件建议写法

推荐分行:

复制代码
127.0.0.1 dev.local-app.test
127.0.0.1 localhost

⑤ 确认 Next 监听 Host

启动日志应显示:

复制代码
Local: https://dev.local-app.test:7777

排查逻辑总结(实战通用)

当遇到:

✔ localhost 正常

✔ IP 正常

✔ 自定义域名 HTTPS 失败

优先级:


复制代码
curl -k
mkcert -install
certmgr.msc
清除 HSTS
删除 certificates

本质理解(重点)

问题并不是:

❌ Next.js

❌ 域名解析

❌ hosts

而是:

浏览器 TLS 信任机制

HTTPS 是否可用取决于:

✔ Root CA 是否信任

✔ 证书域名是否匹配

✔ HSTS 是否强制策略

✔ 浏览器缓存状态


推荐长期稳定方案

✔ mkcert 手动统一证书

✔ 多域名共享证书

✔ turborepo / 多项目统一 HTTPS

避免:

❌ HTTPS 随机失效

❌ 证书重复生成

❌ 浏览器策略冲突


结论

在 Next.js 本地 HTTPS 场景中:

绝大多数自定义域名访问失败 = mkcert / 浏览器信任问题

牢记三板斧:

复制代码
curl -k
mkcert -install
清除 HSTS

即可快速定位问题。

相关推荐
xcLeigh10 分钟前
鸿蒙平台 KeePass 密码管理器适配实战:从 Windows 到 鸿蒙PC 的 Electron 迁移指南
windows·electron·web·harmonyos·加密算法·keepass
caimouse3 小时前
Reactos 第 9 章 设备驱动 — 9.1 Windows的设备驱动框架
windows
宸丶一3 小时前
Day 10:LangGraph - Agent 的图执行引擎
java·windows·python
ylscode3 小时前
GreatXML BitLocker绕过漏洞深度解析:Windows Defender离线扫描如何被改造成本地提权后门
windows·安全
caimouse4 小时前
Reactos 第 8 章 结构化异常处理 — 8.1 结构化异常处理的程序框架
windows
caimouse5 小时前
Reactos 第 7 章 视窗报文 — 7.1 视窗线程与 Win32k 扩充系统调用
windows
caimouse6 小时前
Reactos 第 9 章 设备驱动 — 9.7 一个过滤设备驱动模块的示例
windows
caimouse6 小时前
Reactos 第 7 章 视窗报文 — 7.7 鼠标器输入线程
windows
caimouse6 小时前
Reactos 第 7 章 视窗报文 — 7.2 视窗报文的接收
windows
caimouse7 小时前
Reactos 第 8 章 结构化异常处理 — 8.3 用户空间的结构化异常处理
windows