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

即可快速定位问题。

相关推荐
helloweilei2 天前
一文搞懂Nextjs中的Proxy
前端·next.js
阿白的白日梦3 天前
winget基础管理---更新/修改源为国内源
windows
小时前端3 天前
HTTPS 页面加载 HTTP 脚本被拦?同源代理来救场
前端·https
小肚肚肚肚肚哦4 天前
Nextjs ISR 企业落地实战
next.js
Dilettante2587 天前
React Server Components 全链路解析:Next.js 构建产物、导航流程与 Payload 格式
前端·next.js
HashTang7 天前
从 Next.js 完全迁移到 vinext 的实战踩坑指南
ai编程·全栈·next.js
埃博拉酱7 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
小岛前端7 天前
Cloudflare 掀桌子了,Next.js 迎来重大变化,尤雨溪都说酷!
前端·vite·next.js
孟陬7 天前
Tanstack Start 的天才创新之处——基于实际使用体验
react.js·visual studio code·next.js
唐宋元明清21887 天前
.NET 本地Db数据库-技术方案选型
windows·c#