小程序后台配置 --- CentOS 7.3 64、nginx、node.js
小程序后台配置
目的
配置一个小程序后台的开发、发布环境,同时保留顶级域名另作他用。
需求:
- 一个域名
- 一个主机
- 一个小程序账号
系统和软件
这里使用CentOS 7.3 64位系统
和nginx
、node.js
一、域名到主机
购买域名和主机
这里我买的是西部数码的域名和腾讯云的主机
解析域名到主机服务商
如果主机和域名是一个服务商,则跳过这一步
到域名购买商处,把域名解析到主机运营商,具体方法去主机运营商的域名解析查看
如,腾讯云主机的解析方法是,
请到域名注册商处将DNS修改为:f1g1ns1.dnspod.netf1g1ns2.dnspod.net
修改DNS服务器需要最长72个小时的全球生效时间,请耐心等待。
备案
在主机运营商处,为域名备案
设置二级域名
为什么要设置二级域名,对我个人来说来说,有几点:
- 域名用于多个网站和多个小程序
- 域名同时用于多个环境:开发环境、正式发布环境
这里,我们先设置一个wx二级域名,一个wx-dev二级域名:
假设主域名是aaa.top
则在主机服务商上(域名已经解析到了这里),设置域名解析:
www.aaa.top --> 官网,另作他用,这里不管
wx.aaa.top --> 小下程序发布环境调用
wx-dev.aaa.top --> 小程序发布环境调用
同理,如需设置多个小程序,可以再添加多个二级域名
wx2.aaa.top --> 小下程序发布环境调用
wx2-dev.aaa.top --> 小程序发布环境调用
添加方法:
在腾讯云中,已有前面两行,我这里添加后面两行
记录类型 | 记录类型 | 线路类型 | 记录值 |
---|---|---|---|
@ | A | 默认 | 119.29.107.153 |
www | A | 默认 | 119.29.107.153 |
wx | A | 默认 | 119.29.107.153 |
wx-dev | A | 默认 | 119.29.107.153 |
申请证书
因为小程序要求使用https
协议,所以需要使用到ssl证书,在腾讯云中,可以申请到免费的证书。
进入腾讯云ssl证书管理页面为我们的二级域名申请证书。
这里申请两个,wx.aaa.top
和wx-dev.aaa.top
,腾讯云这里申请大约要一个小时。
申请完成后,将两个证书下载到本地。在把其中Nginx
文件夹中的两个文件解压出来,上传到服务器中,保存至/data/release/nginx/
。
二、主机配置
这里使用的是,nginx + node.js 搭建后台
nginx可实现反代理,可以将不同的域名分配给不同的主机或者端口。
node.js用来写后台程序,你也可以用php等其他后端语言。
安装 Nginx
这里使用CentOS自带的yum
直接安装 Nginx
yum -y install nginx
安装完成之后会显示 Complete!
,可以通过如下命令检查Nginx
是否安装成功:
nginx -v
这个命令会显示 Nginx 的版本号,如果显示如下信息,则安装成功:
[root@VM_0_16_centos ~]# nginx -v
nginx version: nginx/1.12.2
配置 Nginx 反向代理
参考 nginx配置
在/etc/nginx/conf.d/
中添加wxapp.conf
:
注意,下面的wx.aaa.top应该替换成自己的wx二级域名,这样就已经使得wx.aaa.top解析到自己的主机,且反代理到4001端口
# 将使用80端口http协议的wx.aaa.top全部转到https协议上
server {
listen 80;
server_name wx.aaa.top;
rewrite ^(.*)$ https://$server_name$1 permanent;
}
server {
listen 443;
server_name wx.aaa.top;
ssl on;
# 证书保存的地方
ssl_certificate /data/release/nginx/1_wx.aaa.top_bundle.crt;
ssl_certificate_key /data/release/nginx/2_wx.aaa.top.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
ssl_session_cache shared:SSL:50m;
ssl_prefer_server_ciphers on;
location / {
# 反代理到其他域名:
#proxy_pass http://app_weapp;
# 反代理到4001端口
proxy_pass http://localhost:4001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
同理,可以再为wx-dev.aaa.top添加反代理到4002端口.
这时,在浏览器中输入,http://wx.aaa.top/
,会跳转到https://wx.aaa.top/
且如下显示502信息,则到这一步,都是正确的。
502 Bad Gateway
nginx/1.12.2
安装node.js
下载node.js压缩包
先在node官网找到对应系统版本的node
复制链接,我这里找到的是,linux64位
,复制链接https://nodejs.org/dist/v8.9.4/node-v8.9.4-linux-x64.tar.xz
在linux下输入
#wget https://nodejs.org/dist/v8.9.4/node-v8.9.4-linux-x64.tar.xz
解压
#xz -d node-v8.9.4-linux-x64.tar.xz
#tar -xf node-v8.9.4-linux-x64.tar
解压之后得到的文件夹移动到/usr/local/
为了方便这里吧文件夹改名为node
测试能否运行
进入node/bin/
运行./node -v
和./npm -v
能显示对应版本则为正确
配置node.js
要想node能够在全局能够使用,需要添加连接,在控制台输入下面命令能够实现。其中/usr/local/nodebin/node
为二进制node.js文件的目录,根据上面的步骤,我已经把node整个文件夹移动到/usr/local
所以这里是:
#ln -s /usr/local/node/bin/node /usr/local/bin/node
#ln -s /usr/local/node/bin/npm /usr/local/bin/npm
测试
[root@VM_0_16_centos bin]# node -v
v8.9.4
[root@VM_0_16_centos bin]# npm -v
5.6.0
到这里node就安装完成了
测试nginx和node.js能否正常工作
新建一个文件
vim server.js
在server.js
中保存下面代码
var http = require('http');
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// 发送响应数据 "Hello World"
response.end('Hello World\n');
}).listen(4001);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:4001/');
启动服务器。
node server.js
在本地电脑浏览器中,输入wx.aaa.top。显示Hello World
则域名配置完成
同理,可以测试wx-dev.aaa.top
三、小程序后台设置
进入微信公众平台
进入设置
》开发设置
》服务器域名
》修改
在request合法域名
一行填入我们的两个二级域名
wx.aaa.top
wx-dev.aaa.top
保存后新建一个小程序,选择模板
在app.js中发起request
wx.request({
url: 'https://wx.aaa.top',
data: {
x:10,
y:20
},
header: {
'content-type': 'application/json' // 默认值
},
success: res => {
if (res.statusCode == 200) {
console.log(res.data);
}
}
});
保存后刷新,能在控制台中看到,由wx.aaa.top发来的数据,则说明已经成功。
总结
整个交互流程是:
小程序
发起请求
,提交一个数据
和url
给腾讯后台
腾讯后台
再把数据提交给url
- 经过域名解析,数据发到了我们自己的
后台服务器
上 - 服务器得到了请求,经过
nginx
进行反代理,把每个请求分发给各个另外的主机或者端口 - 在这里,
nginx
将向wx.aaa.top
发起的请求分发给了4001
端口 - 而
4001
端口正由我们的node.js程序
监听。
所以请求
最后是分发给了node.js程序
,它得到了请求发来的数据,进行处理,并发起响应,再一步步回到客户端小程序
。