1. 为什么需要配置合法域名与反向代理第一次开发微信小程序的朋友可能会遇到这样的问题本地调试时一切正常但一上线就发现接口请求全部失败。这种情况十有八九是因为没有配置合法域名。微信小程序出于安全考虑要求所有网络请求必须指向预先配置的合法域名否则会被拦截。我刚开始做小程序时就踩过这个坑。当时花了两天时间排查问题最后才发现是域名没配置好。后来帮朋友处理类似问题时发现很多人都会卡在反向代理这个环节。其实整个过程并不复杂只要跟着步骤一步步来半小时就能搞定。合法域名配置的核心要点有三个域名必须备案、必须支持HTTPS、必须通过微信的校验。而反向代理的作用简单说就是把你的服务器IP藏在域名后面既满足小程序的要求又能灵活部署后端服务。2. 前期准备工作2.1 域名与服务器准备首先你需要一个已经备案的域名。国内常见的域名服务商有阿里云、腾讯云等备案过程一般需要3-20个工作日。这里有个小技巧如果你只是做测试可以购买已经备案过的二手域名价格会便宜很多。服务器方面建议选择1核2G以上的配置。我比较推荐腾讯云的轻量应用服务器性价比很高。操作系统选CentOS 7.x或Ubuntu 20.04都可以这些都是宝塔面板完美支持的版本。2.2 安装宝塔面板宝塔面板绝对是新手福音它能让你通过图形界面完成90%的服务器配置工作。安装命令很简单# CentOS系统 yum install -y wget wget -O install.sh http://download.bt.cn/install/install_6.0.sh sh install.sh # Ubuntu系统 wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh sudo bash install.sh安装完成后记得在云服务器控制台的安全组里放行8888端口宝塔默认端口。第一次登录会提示你安装Web环境建议选择Nginx 1.20 PHP 7.4的组合这对小程序开发来说已经够用了。3. 配置HTTPS证书3.1 申请免费SSL证书现在各大云平台都提供免费SSL证书以腾讯云为例进入SSL证书控制台点击申请免费证书填写域名信息支持通配符域名完成DNS验证下载证书文件通常包含.crt和.key两个文件3.2 在宝塔部署证书回到宝塔面板点击左侧网站添加站点填写你的域名进入站点设置 - SSL选择其他证书粘贴证书内容注意不要有多余空格开启强制HTTPS测试一下在浏览器访问https://你的域名应该能看到安全锁标志。如果出现证书错误很可能是证书链不完整需要把中间证书也合并到.crt文件中。4. 内网穿透配置4.1 FRP服务端配置如果你的后端服务运行在内网就需要内网穿透。FRP是目前最稳定的方案之一。先在服务器上安装FRP服务端wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz tar -zxvf frp_0.38.0_linux_amd64.tar.gz cd frp_0.38.0_linux_amd64修改frps.ini配置文件[common] bind_port 7000 token your_secure_token vhost_http_port 8080 dashboard_port 7500 dashboard_user admin dashboard_pwd your_password启动服务端nohup ./frps -c frps.ini frps.log 21 4.2 FRP客户端配置在内网机器上下载对应版本的FRP修改frpc.ini[common] server_addr 你的服务器IP server_port 7000 token your_secure_token [web] type http local_port 5000 custom_domains 你的域名启动客户端nohup ./frpc -c frpc.ini frpc.log 21 现在通过http://你的域名:8080 应该能访问到内网服务了。5. Nginx反向代理配置5.1 基础反向代理设置在宝塔面板中进入网站设置 - 反向代理添加反向代理目标URL填写http://127.0.0.1:8080发送域名填写你的完整域名对应的Nginx配置大概长这样location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }5.2 高级配置技巧如果后端需要WebSocket支持要额外添加proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade;遇到跨域问题可以在Nginx中添加add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET, POST, OPTIONS; add_header Access-Control-Allow-Headers DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization;6. 微信小程序配置6.1 后台域名配置登录微信公众平台进入开发 - 开发设置在服务器域名中添加你的HTTPS域名request合法域名、uploadFile合法域名等都要配置如果是WebSocket还需要配置socket合法域名6.2 常见问题排查如果配置后仍然报错可以按以下步骤检查确保域名没有写错包括http/https检查证书是否过期可用openssl s_client -connect命令测试用Postman测试接口是否能正常响应查看Nginx错误日志通常在/var/log/nginx/error.log有个容易忽略的点微信要求TLS版本必须≥1.2。可以用这个命令检查openssl s_client -connect yourdomain.com:443 -tls1_27. 实战经验分享在实际项目中我发现这些细节特别重要域名解析TTL值修改DNS记录后建议把TTL调低到300秒这样变更生效更快证书自动续期使用宝塔的Lets Encrypt证书可以自动续期避免服务中断端口冲突问题FRP的vhost_http_port不要用80/443这些端口可能被占用性能调优Nginx反向代理时可以启用缓存减轻后端压力proxy_cache_path /tmp/nginx_cache levels1:2 keys_zonemy_cache:10m inactive60m; proxy_cache_key $scheme$request_method$host$request_uri;最后提醒一点所有配置修改后别忘了重启相关服务。Nginx是nginx -s reloadFRP需要kill掉进程重新启动。