配置一個小程序後臺的開發、發佈環境,同時保留頂級域名另做他用。php
這裏使用CentOS 7.3 64位系統
和nginx
、node.js
node
這裏我買的是西部數碼的域名和騰訊雲的主機linux
若是主機和域名是一個服務商,則跳過這一步nginx
到域名購買商處,把域名解析到主機運營商,具體方法去主機運營商的域名解析查看
如,騰訊雲主機的解析方法是,npm
請到域名註冊商處將DNS修改成:f1g1ns1.dnspod.netf1g1ns2.dnspod.net
修改DNS服務器須要最長72個小時的全球生效時間,請耐心等待。json
在主機運營商處,爲域名備案小程序
爲何要設置二級域名,對我我的來講來講,有幾點:vim
這裏,咱們先設置一個wx二級域名,一個wx-dev二級域名:
假設主域名是aaa.top
則在主機服務商上(域名已經解析到了這裏),設置域名解析:後端
www.aaa.top --> 官網,另做他用,這裏無論
wx.aaa.top --> 小下程序發佈環境調用
wx-dev.aaa.top --> 小程序發佈環境調用centos
同理,如需設置多個小程序,能夠再添加多個二級域名
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等其餘後端語言。
這裏使用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配置
在/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官網找到對應系統版本的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可以在全局可以使用,須要添加鏈接,在控制檯輸入下面命令可以實現。其中/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就安裝完成了
新建一個文件
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程序
,它獲得了請求發來的數據,進行處理,併發起響應,再一步步回到客戶端小程序
。