本机 局域网 搭建本地 HTTPS 域名完整方案 本机 局域网 搭建本地 HTTPS 域名完整方案自定义域名如local.dev/pc.home局域网内所有手机、平板、其他电脑通过https://自定义域名一、整体原理自签发 SSL 根证书 站点证书mkcert 一键生成openSSL生成修改本机 局域网所有设备hosts文件把自定义域名指向本机局域网 IPWeb 服务Nginx/Caddy/Apache/Node/Java绑定 443 端口并加载证书局域网内同 WiFi 下所有设备共用解析实现 HTTPS 访问二、具体操作1获取本机局域网 IPWindowsipconfig找到无线网卡 / Wi-Fi 适配器 IPv4例如192.168.1.222Mac/Linuxifconfig# 或hostname-I记录 IP192.168.x.x自定义域名示例dev.local、server.lan、my-pc.home, 这里使用dev.local2用 mkcert 生成局域网可信 SSL 证书推荐mkcert 自动生成根证书安装到系统信任列表浏览器不会报不安全警告。1. 安装 mkcertWindowsPowerShell 管理员choco install mkcert没有 choco 就去 GitHub 下载二进制https://github.com/FiloSottile/mkcert/releasesMacbrewinstallmkcert mkcert-install#安装根证书到系统信任库关键消除浏览器警告Linuxsudoaptinstallmkcert mkcert-install#安装根证书到系统信任库关键消除浏览器警告2. 生成域名证书新建文件夹WindowsD:\nginx\ssl\Mac~/nginx/ssl/进入目录执行mkcert dev.local *.dev.local192.168.1.105 localhost127.0.0.1执行后生成 4 个文件dev.local4.pem公钥证书dev.local4-key.pem私钥密钥mkcert -install只需要执行一次把根证书导入系统信任库。顺带生成 p12给 SpringBoot 用mkcert-pkcs12lan.local得到lan.local.p12密钥库记下输出的随机密码导出根证书给手机 / 其他设备信任查看根证书路径# Windows / Mac 通用命令mkcert-CAROOT拿到rootCA.pem发给 iPhone/Android 安装信任局域网手机访问https://lan.local无警告。3修改 Hosts 做局域网域名解析3.1 本机修改 hosts必做Windows 路径C:\Windows\System32\drivers\etc\hosts用记事本右键以管理员身份打开末尾添加一行192.168.1.222 dev.local刷新 DNS 生效ipconfig /flushdns ping lan.localMac / Linuxsudovim/etc/hosts# 添加192.168.1.222 dev.local快捷键CtrlO保存CtrlX退出刷新 DNSsudodscacheutil -flushcache;sudokillall-HUPmDNSResponderpinglan.local终极优化路由器后台绑定静态 DNSLAN_IP lan.local所有设备不用改 hosts。测试解析是否生效ping dev.local能 ping 通 IP 就成功。3.2 局域网其他设备也要改 hosts手机 / 另一台电脑另一台 Windows/Mac/Linux同样修改 hosts 文件添加上面那行 IP 域名。Android 手机需要 root或用第三方 APPHosts Go、HTTP Injector写入规则。iPhone 苹果手机设置 → 无线局域网 → 点 WiFi 旁边 ⓘ → 配置 DNS → 手动添加或者安装描述文件方式修改 hosts最简单替代方案路由器绑定静态域名下文进阶方案痛点每台设备改 hosts 麻烦 → 看最后【路由器全局 DNS 解析】终极方案。4Web 服务配置 HTTPS3 种最常用服务方案 ANginx 配置 HTTPSWindows/Nginx for Windows将刚才生成的两个证书文件放入nginx/conf/ssl/修改nginx.confserver 块# HTTP 80 强制跳转 HTTPS server { listen 80; listen [::]:80; server_name lan.local; return 301 https://$host$request_uri; } # HTTPS 443 主服务 server { listen 443 ssl; listen [::]:443 ssl; server_name lan.local; # Windows 证书路径 # ssl_certificate D:/nginx/ssl/lan.local4.pem; # ssl_certificate_key D:/nginx/ssl/lan.local4-key.pem; # Mac 证书路径启动时切换注释即可 ssl_certificate /Users/你的用户名/nginx/ssl/lan.local4.pem; ssl_certificate_key /Users/你的用户名/nginx/ssl/lan.local4-key.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; # 1. Vue 打包静态资源 直接访问 location / { root D:/vue-dist; # Mac改为 /Users/xxx/vue-dist index index.html index.htm; try_files $uri $uri/ /index.html; # Vue history路由模式必备 } # 2. SpringBoot 后端接口反向代理 location /api/ { proxy_pass http://127.0.0.1:8080/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 3. Node 服务反向代理例如Node跑在3000端口 location /node/ { proxy_pass http://127.0.0.1:3000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }重载 Nginx# windownginx-sstop nginx nginx-sreload# Linux / mac# Homebrew安装的nginxbrew services restart nginx# 二进制包./nginx-sreloadWindows 放行防火墙端口入站规则新建放行80、443TCP 端口否则局域网其他设备打不开。访问https://dev.local方案 BCaddy最简单自动 HTTPS一行配置Caddy 天然支持自签局域网证书无需手动生成Caddyfiledev.local { tls internal reverse_proxy 127.0.0.1:8080 }启动直接生效浏览器信任警告点高级继续即可。方案 CNode.js Express 直接加载证书1Node 自己加载证书独立 HTTPS端口 3001consthttpsrequire(https);constfsrequire(fs);constexpressrequire(express);constappexpress();constoptions{key:fs.readFileSync(./dev.local4-key.pem),cert:fs.readFileSync(./dev.local4.pem)};// 可以直接使用443 端口https.createServer(options,app).listen(443,(){console.log(HTTPS running on https://dev.local);});// 或是使用3001 端口https.createServer(options,app).listen(3001,(){console.log(Node HTTPS: https://lan.local:3001);});2Node 只开 HTTP 3000Nginx 反向代理constexpressrequire(express);constappexpress();app.listen(3000,()console.log(Node HTTP 3000));配合上面 Nginx/node/路径访问https://lan.local/node/方案 DSpringBoot 内置 HTTPS 配置1直接内置 Tomcat 开启 443不经过 Nginx把lan.local.p12放到resources目录把 pem 转成 pkcs12 格式mkcert 自带命令mkcert -pkcs12 dev.localapplication.ymlserver:port:443ssl:key-store:classpath:lan.local.p12key-store-password:这里填mkcert输出的密码key-store-type:PKCS12enabled:true访问https://lan.local:4432只启动 HTTP 8080交由 Nginx 统一管理SpringBoot 不用配置 SSL只开 8080全部 HTTPS 收口在 Nginx证书统一维护Vue/Node/SpringBoot 一套证书搞定。三、局域网其他设备访问前关键操作消除证书警告Windows/Mac 本机mkcert -install已经信任根证书直接打开无警告。手机、其他电脑访问必须安装根证书找到 mkcert 根证书位置mkcert-CAROOT会输出文件夹路径里面有rootCA.pem把rootCA.pem发给手机Android文件管理器打开 → 安装证书 → 选择 VPN 和应用iPhone用 Safari 打开证书文件 → 允许下载 → 设置 → 通用 → VPN 与设备管理 → 安装描述文件 → 再去 关于本机 → 证书信任设置 打开开关安装完成后手机打开https://dev.local完全绿色安全。四、终极简化路由器全局绑定域名不用每台设备改 hosts如果路由器支持自定义 DNSOpenWRT、小米、华硕、TP-Link 高级版进入路由器后台 → DNS 设置 / 静态域名 /hosts 绑定添加192.168.1.222 dev.local局域网所有设备 WiFi 网关自动走路由器 DNS所有设备不用改任何 hosts直接访问https://dev.local这是局域网 HTTPS 域名最优雅的方式。五、常见问题排查无法访问关闭 Windows 防火墙、放行 443/80 端口确认所有设备连同一个 WiFi证书仍不安全一定安装 mkcert 生成的 rootCA 根证书到设备系统信任区端口被占用用netstat -ano | findstr :443杀掉占用 443 的进程只能本机访问Nginx 监听地址改成listen 0.0.0.0:443 ssl;六、极简快速上手版IP192.168.1.222域名lan.test生成证书命令mkcert lan.test *.lan.test 192.168.1.105 localhosthosts 写入192.168.1.222 lan.testNginx 绑定 443 加载证书即可。七、Node 搭建轻量 DNS 服务器Windows / Mac 电脑自己运行 DNS 服务监听 53 端口手机仅做一步操作WiFi 手动 DNS 填电脑局域网 IP手机自动解析lan.local→ 电脑 IP全程不用改 hosts、不动路由器配合你已有的 mkcert HTTPS 证书 Nginx 反向代理完美闭环Node DNS 服务代码新建lan-dns.jsconstdnsrequire(dns);constDnsServerrequire(dns-server);// 配置区只改这里// Windows本机局域网IPconstPC_LAN_IP192.168.1.222;// Mac本机局域网IP切换系统时替换上面即可// const PC_LAN_IP 192.168.1.200;// 要解析的局域网域名列表constDOMAIN_MAP{lan.local:PC_LAN_IP,www.lan.local:PC_LAN_IP};// constserverDnsServer.createServer((req,res){constqueryreq.question[0];constdomainquery.name;// 匹配自定义内网域名if(DOMAIN_MAP.hasOwnProperty(domain)){res.answer.push({name:domain,type:1,// A记录 IPv4ttl:300,address:DOMAIN_MAP[domain]});res.send();return;}// 外网域名转发到公共DNS保证手机正常上网dns.resolve4(domain,(err,addresses){if(!err){addresses.forEach(ip{res.answer.push({name:domain,type:1,ttl:300,address:ip});});}res.send();});});// 监听所有网卡 53端口 UDPserver.listen(53,0.0.0.0,(){console.log(✅ 内网DNS服务启动成功);console.log( 本机IP:${PC_LAN_IP});console.log( 解析域名:${Object.keys(DOMAIN_MAP).join(, )});console.log( 手机WiFi手动DNS填写上面IP即可);});安装依赖 启动npminstalldns-server# 启动服务nodelan-dns.jsdns-server 无法安装时可以使用 node 内置 dns dgram 实现constdgramrequire(dgram);constdnsrequire(dns);// 配置区 // Windows 局域网IPconstPC_IP192.168.1.222;// Mac 切换打开下面注释// const PC_IP 192.168.3.200;// 内网域名映射DNS 域名必须带末尾点constdomainMap{lan.local.:PC_IP};// 外网转发上游DNS阿里云公共DNSconstUPSTREAM_DNS223.5.5.5;// // 创建 UDP Socketconstserverdgram.createSocket(udp4);server.on(message,(msg,rinfo){constclientAddrrinfo.address;constclientPortrinfo.port;// 简单解析DNS报文提取查询域名letdomain;letoffset12;while(true){constlenmsg.readUInt8(offset);if(len0)break;domainmsg.slice(offset1,offset1len).toString().;offsetlen1;}// 匹配自定义内网域名if(domainMap[domain]){consttargetIPdomainMap[domain];// 构造A记录DNS响应简化固定报文constheaderBuffer.from([msg[0],msg[1],0x81,0x80,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00]);constquestionmsg.slice(12,offset5);// IP转4字节BufferconstipPartstargetIP.split(.).map(Number);constanswerBuffer.concat([Buffer.from([0xC0,0x0C]),// 指针指向域名Buffer.from([0x00,0x01]),// A记录Buffer.from([0x00,0x01]),// IN类Buffer.from([0x00,0x00,0x01,0x2C]),// TTL300Buffer.from([0x00,0x04]),// IP长度4字节Buffer.from(ipParts)]);constresponseBuffer.concat([header,question,answer]);server.send(response,clientPort,clientAddr);console.log([内网解析]${domain.trimEnd(.)}-${targetIP});return;}// 非内网域名转发上游公共DNSconstclientSocketdgram.createSocket(udp4);clientSocket.on(message,(resBuf){server.send(resBuf,clientPort,clientAddr);clientSocket.close();});clientSocket.send(msg,53,UPSTREAM_DNS);});server.on(listening,(){constaddrserver.address();console.log();console.log(Node 内网DNS 已启动);console.log(监听:${addr.address}:${addr.port}UDP);console.log(解析规则: lan.local ${PC_IP});console.log(手机WiFi手动DNS填写此IP即可);console.log(CtrlC 停止服务);console.log();});// 绑定0.0.0.0:53server.bind(53,0.0.0.0);// 捕获退出process.on(SIGINT,(){server.close();console.log(\nDNS 服务已关闭);process.exit(0);});Windows 关键防火墙放行必做控制面板 → Windows Defender 防火墙 → 高级设置入站规则 → 新建规则 → 端口 → UDP → 特定端口填写53允许连接命名Local DNS UDP 53Mac 放行 53 端口终端sudopfctl-f/etc/pf.conf另提供一个python 版本importsocketimportdnslibfromdnslibimportDNSRecord,RR,QTYPE,A,RDATA# 配置区域 # 切换 Windows / Mac 时只改这一行LOCAL_LAN_IP192.168.3.100# 自定义内网域名映射DOMAIN_MAPPING{lan.local.:LOCAL_LAN_IP,www.lan.local.:LOCAL_LAN_IP}# 外网上游公共DNS阿里云UPSTREAM_DNS(223.5.5.5,53)# classLocalDNSServer:defresolve(self,request,handler):replyrequest.reply()qnamerequest.q.qname qtypeQTYPE[request.q.qtype]# 命中自定义内网域名ifqnameinDOMAIN_MAPPINGandqtypeQTYPE.A:ip_addrDOMAIN_MAPPING[qname]reply.add_answer(RR(qname,QTYPE.A,rdataA(ip_addr),ttl300))returnreply# 未命中则转发上游公共DNStry:forward_socketsocket.socket(socket.AF_INET,socket.SOCK_DGRAM)forward_socket.settimeout(2)forward_socket.sendto(request.pack(),UPSTREAM_DNS)resp_data,_forward_socket.recvfrom(512)forward_socket.close()upstream_replyDNSRecord.parse(resp_data)returnupstream_replyexceptException:returnreplyif__name____main__:fromdnslib.serverimportDNSServer,DNSHandler,UDPServer serverDNSServer(LocalDNSServer(),port53,address0.0.0.0,serverUDPServer,handlerDNSHandler)print()print(f✅ 内网DNS服务启动成功)print(f 监听地址: 0.0.0.0:53 UDP)print(f 域名解析: lan.local -{LOCAL_LAN_IP})print(f 手机WiFi手动DNS填写此IP即可)print()try:server.start()exceptKeyboardInterrupt:server.stop()print(\nDNS 服务已停止)需要安装的依赖pip install dnslib手机只做这一步全程不用任何 Hosts 工具iPhone设置 → 无线局域网 → 点 WiFi 右边 ⓘ配置 DNS → 手动 → 添加 DNS 服务器填入电脑局域网 IP192.168.3.100删除原有自动 DNS只保留这一条保存Android长按 WiFi → 修改网络 → 显示高级选项IP 设置DHCP 不变DNS 1填写电脑 IP192.168.3.100DNS2 留空或填公共 DNS223.5.5.5验证手机是否解析成功手机浏览器访问https://lan.local已经自动解析到电脑纯域名访问满足你的硬性要求。

相关新闻

最新新闻

显卡驱动卸载失败怎么办?Display Driver Uninstaller 深度清理实战手册

显卡驱动卸载失败怎么办?Display Driver Uninstaller 深度清理实战手册

显卡驱动卸载失败怎么办?Display Driver Uninstaller 深度清理实战手册 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-driv…

2026/8/16 0:43:33
空洞骑士装 Mod 后闪退?Scarab 崩溃修复完整指南(附速查表)

空洞骑士装 Mod 后闪退?Scarab 崩溃修复完整指南(附速查表)

空洞骑士装 Mod 后闪退?Scarab 崩溃修复完整指南(附速查表) 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab Scarab 是一款面向空洞骑士玩…

2026/8/16 0:43:33
基于Springboot的小香葱种植管理系统源码+文档

基于Springboot的小香葱种植管理系统源码+文档

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/16 0:43:33
基于空调 - 电动汽车联合虚拟储能的海岛微电网协同优化调度研究(Matlab代码实现)

基于空调 - 电动汽车联合虚拟储能的海岛微电网协同优化调度研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

2026/8/16 0:38:33
【碳排放流】碳排放流理论+MILP+源荷协同优化研究(Matlab代码实现)

【碳排放流】碳排放流理论+MILP+源荷协同优化研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

2026/8/16 0:38:33
基于Spring Boot的畜牧养殖管理系统设计开发实现

基于Spring Boot的畜牧养殖管理系统设计开发实现

一、项目背景与意义随着现代农业向集约化、智能化方向发展,传统粗放式的畜牧养殖管理模式已难以满足现代畜牧业对生产效率、成本控制和食品安全追溯的高要求。开发一套基于信息技术的畜牧养殖管理系统,对于提升养殖场管理水平、降低运营风险、保障产品质…

2026/8/16 0:38:33