小程序后台配置 --- CentOS 7.3 64、nginx、node.js

小程序后台配置

目的

配置一个小程序后台的开发、发布环境,同时保留顶级域名另作他用。

需求:

  1. 一个域名
  2. 一个主机
  3. 一个小程序账号

系统和软件

这里使用CentOS 7.3 64位系统nginxnode.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.topwx-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发来的数据,则说明已经成功。

总结

整个交互流程是:

  1. 小程序发起请求,提交一个数据url腾讯后台
  2. 腾讯后台再把数据提交给url
  3. 经过域名解析,数据发到了我们自己的后台服务器
  4. 服务器得到了请求,经过nginx进行反代理,把每个请求分发给各个另外的主机或者端口
  5. 在这里,nginx将向wx.aaa.top发起的请求分发给了4001端口
  6. 4001端口正由我们的node.js程序监听。
    所以请求最后是分发给了node.js程序,它得到了请求发来的数据,进行处理,并发起响应,再一步步回到客户端小程序
posted @ 2018-01-23 18:24  AmosLee94  阅读(1069)  评论(0编辑  收藏  举报