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

即可快速定位问题。

相关推荐
xifangge20253 小时前
[报错] SpringBoot 启动报错:Port 8080 was already in use 完美解决(Windows/Mac/Linux)
java·windows·spring boot·macos·错误解决
x***r15116 小时前
SuperScan4单文件扫描安装步骤详解(附端口扫描与主机存活检测教程)
windows
不爱学习的老登17 小时前
Windows客户端与Linux服务器配置ssh无密码登录
linux·服务器·windows
陌陌龙18 小时前
全免去水印大师 v1.7.6 | 安卓端高效水印处理神器
windows
csdn2015_19 小时前
将object转换成list
开发语言·windows·python
SJjiemo1 天前
LeafView 图片查看器
windows
ENEN98811 天前
【精品珍藏自购付费资源】2026年日历PSD模板合集【PSD CDR多格式可编辑】已分类含预览 [7.5G]
windows·经验分享·电脑
njsgcs1 天前
windows ui窗口post 我wsl开放的flask llm端点
windows·ui·flask·post
这波不该贪内存的1 天前
数据结构三个典型的类型整理
数据结构·windows