买了服务器只是开始。小程序后端要真正跑起来,还得过三关:域名解析、ICP 备案、HTTPS 证书,最后在小程序后台配"合法域名"。这篇按操作顺序一步步来,全部命令可直接抄。
整体时间线:解析(10 分钟)→ 备案(3–20 个工作日,看地区)→ 部署环境(半小时)→ 配证书(10 分钟)→ 配合法域名(5 分钟)。备案最久,所以买完服务器第一件事就是提交备案,边等边搭环境。
一、域名解析:把域名指到服务器
在小程序后台配置合法域名之前,域名必须先能访问你的服务器。假设域名是 api.yourdomain.com:
| 记录类型 | 主机记录 | 值 | 说明 |
|---|---|---|---|
| A | api | 你的服务器 IP | 直接指向 IP |
| CNAME | api | 商家给的映射域名 | NAT 型常用,问商家要 |
NAT 型服务器没有固定公网 IP 时,用商家提供的映射域名做 CNAME。解析生效用 dig 或 nslookup 验证:
dig api.yourdomain.com +short
# 返回 IP 或 CNAME 目标即生效DNS 记录类型详解见域名解析与 DNS 记录详解。
二、ICP 备案:大陆主机的必经之路
为什么必须备:微信小程序后台配置服务器域名时,域名必须已完成 ICP 备案(大陆服务器)。没备案的域名配进去,请求直接失败。
流程(通过你买服务器的商家接入,最省事):
- 在商家控制台提交"备案申请",拿到备案服务号
- 登录工信部备案系统,填主体信息(个人:身份证;企业:营业执照 + 法人信息)
- 上传资料 → 商家初审(1–2 个工作日)
- 短信核验(工信部会发短信到负责人手机,24 小时内必须完成核验,超时被打回)
- 管局审核(5–20 个工作日,各省不同)
- 备案通过,拿到备案号,按要求挂在网站底部
省时技巧:资料一次填对。常见被打回的原因:网站名称不规范、联系方式空号、照片不清晰。详细流程和避坑见域名备案流程完全指南。
不想备案?买中国香港节点可以跳过,但大陆用户访问延迟会高一些,且微信对非大陆服务器的域名同样要求 HTTPS,只是不校验备案。
三、搭环境:Nginx + 后端 + 数据库
以最常见的 Nginx + Node.js + MySQL 为例,宝塔方案:
# 1. 装宝塔(Ubuntu/Debian)
wget -O install.sh https://download.bt.cn/install/install_lts.sh
sudo bash install.sh
# 2. 面板里安装:Nginx 1.24+、MySQL 8.0、Node版本管理器、PM2Docker 方案(一条 compose 起全部):
services:
nginx:
image: nginx:alpine
ports: ["80:80", "443:443"]
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./certs:/etc/nginx/certs
- ./www:/www
restart: unless-stopped
app:
image: node:20-alpine
working_dir: /app
volumes: ["./app:/app"]
command: sh -c "npm ci --production && node server.js"
restart: unless-stopped
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 改成强密码
MYSQL_DATABASE: miniapp
volumes: ["mysqldata:/var/lib/mysql"]
restart: unless-stopped
redis:
image: redis:7-alpine
command: redis-server --requirepass 改成强密码
volumes: ["redisdata:/data"]
restart: unless-stopped
volumes:
mysqldata:
redisdata:MySQL 安装调优细节见MySQL 安装与优化入门,Redis 见Redis 安装与缓存应用实战。
四、配 HTTPS:证书 + Nginx 反代
申请证书(Let's Encrypt 免费,宝塔里一键申请;或商家送的免费证书):
# certbot 方式(Debian/Ubuntu)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d api.yourdomain.comNginx 配置(把 443 的请求转给本地的 Node 应用):
server {
listen 443 ssl http2;
server_name api.yourdomain.com;
ssl_certificate /etc/nginx/certs/api.yourdomain.com.pem;
ssl_certificate_key /etc/nginx/certs/api.yourdomain.com.key;
# 强制 TLS1.2+,兼容性好
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name api.yourdomain.com;
return 301 https://$host$request_uri; # HTTP 全量跳 HTTPS
}自签证书在微信里不被信任(微信校验证书链),必须用受信任 CA 签发的证书。验证:
curl -I https://api.yourdomain.com/health
# 看到 HTTP/2 200、证书信息无误即通证书部署更多细节见免费 SSL 证书申请与 HTTPS 部署和HTTPS 强制跳转与安全响应头。
五、小程序后台:配置 request 合法域名
证书和接口都通了,最后一步:
- 登录 mp.weixin.qq.com → 开发管理 → 开发设置 → 服务器域名
- 在 request 合法域名 填
https://api.yourdomain.com(只填域名,不带路径、不带端口) - 如果用 WebSocket,另配 socket 合法域名(wss://)
- 用 uploadFile/downloadFile 的,配 uploadFile / downloadFile 合法域名
- 保存后立即生效,但每月只能改有限次数,域名想定再填
开发阶段嫌麻烦,可以临时勾选"不校验合法域名",但提交审核前必须取消勾选并真实配置,否则审核被拒。
六、接口示例:登录态是怎么跑的
小程序登录的标准流程(OpenAPI + 自定义登录态):
小程序 wx.login() 拿到 code
→ 你的后端用 code + AppID + AppSecret 调微信接口,换到 openid + session_key
→ 后端签发自己的 token(JWT 或随机串存 Redis)
→ 前端存 token,后续请求带在 header 里// 后端 Node/Express 示例(登录)
app.get('/api/login', async (req, res) => {
const { code } = req.query
const r = await axios.get('https://api.weixin.qq.com/sns/jscode2session', {
params: {
appid: APPID, secret: APP_SECRET,
js_code: code, grant_type: 'authorization_code'
}
})
const token = signToken(r.data.openid) // 自己签发
await redis.set('token:' + token, r.data.openid, 'EX', 7200)
res.json({ token })
})AppSecret 是最高机密,只能存服务器,绝不能写进小程序前端代码(前端代码所有人可下载)。密钥管理见Steam API Key 与 RCON 密码安全里的同类思路。
七、上线前检查清单
- [ ] 域名解析生效,
dig能查到 - [ ] ICP 备案通过,备案号已挂页面
- [ ]
curl https://域名/health返回 200,证书链完整 - [ ] HTTP 自动跳 HTTPS
- [ ] request 合法域名已配,取消"不校验合法域名"勾选
- [ ] 防火墙只开 443 + SSH,数据库端口不对外
- [ ] 数据库每日自动备份 + 异地一份
- [ ] 接口有频率限制,防刷(见Nginx 限速与 CC 防护进阶)
结语
小程序后端的技术栈不重,重的是流程合规:备案、HTTPS、合法域名,三步一个都不能少。流程走通之后,剩下的就是正常写业务接口了。
需要搭小程序后端服务器,可以看看财富云计算:NAT 型云服务器支持 443 映射,域名备案一站式协助,SSD + 快照备份,被攻击有 DDoS 清洗——后端该有的都有,价格比独立 IP 机型省一半以上。
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]代码写完只是马拉松的一半——小程序审核是出了名的"玄学"。同样一套代码,第一次被拒第五次通过,原因往往就一句话没说清。这篇把高频拒因按出现频率排好队,每条都给出具体改法,提交前对照过一遍,能省掉三四轮返工。一、提审前的自检清单被拒的原因 80% 集中在下面十项。提交前逐条自检:#拒因出现频率1服务类目与功能不符⭐⭐⭐⭐⭐2用户隐私保护指引缺失/不合规⭐⭐⭐⭐⭐3iOS 端虚拟支付未规避⭐⭐⭐⭐4功[...]
2026-10-18 回复
[...]style="width:{{item.w}}px;height:{{item.h}}px" />lazy-load 让视口外图片不加载;提前算好宽高占位,避免图片加载完成时页面"跳一下"。四、网络层优化1. 请求合并把首页的 5 个接口合成 1 个聚合接口(BFF 模式),TCP 握手和域名解析只付一次代价。移动网络下,每次新建连接的隐性成本可能比传输本身还高。2. 开[...]
2026-10-18 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复