1.基本硬件準備,以windows server 2008 爲例html
//1臺主機node
//1個萬維網域名mysql
//域名經過ssl認證nginx
//--服務器端安裝如下--git
//------nginxgithub
//------wampserverweb
//----------Apachesql
//----------Mysql數據庫
//----------PHPexpress
//------node
//---------express
//------pm2
1.以騰訊云爲例 服務器搭建
1.主機與域名DNS解析
1.購買雲主機,購買成功之後,如圖:
2.購買域名,購買成功並認證,如圖:
3.添加域名解析規則:
4.SSL 認證:
5.ssl 認證
認證成功,就能夠下載證書配置本身服務器了。
不一樣服務器具體配置以下:
2. 筆者使用的是 Nginx 證書部署
2.1 獲取證書
Nginx文件夾內得到SSL證書文件 1www.domain.com_bundle.crt 和私鑰文件 2www.domain.com.key, 1_www.domain.com_bundle.crt 文件包括兩段證書代碼 「-----BEGIN CERTIFICATE-----」和「-----END CERTIFICATE-----」, 2_www.domain.com.key 文件包括一段私鑰代碼「-----BEGIN RSA PRIVATE KEY-----」和「-----END RSA PRIVATE KEY-----」。
2.2 證書安裝
將域名 www.domain.com 的證書文件1www.domain.com_bundle.crt 、私鑰文件2www.domain.com.key保存到同一個目錄,例如/usr/local/nginx/conf目錄下。 更新Nginx根目錄下 conf/nginx.conf 文件以下:
server {
listen 443;
server_name www.domain.com; #填寫綁定證書的域名
ssl on;
ssl_certificate 1_www.domain.com_bundle.crt;
ssl_certificate_key 2_www.domain.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置
ssl_prefer_server_ciphers on;
location / {
root html; #站點目錄
index index.html index.htm;
}
}
配置完成後,先用bin/nginx –t來測試下配置是否有誤,正確無誤的話,重啓nginx。就能夠使 https://www.domain.com 來訪問了。
注:
配置文件參數 |
說明 |
listen 443 |
SSL
訪問端口號爲
443
|
ssl on |
啓用
SSL
功能
|
ssl_certificate |
證書文件 |
ssl_certificate_key |
私鑰文件 |
ssl_protocols |
使用的協議 |
ssl_ciphers |
配置加密套件,寫法遵循
openssl
標準
|
2.3 使用全站加密,http自動跳轉https(可選)
對於用戶不知道網站能夠進行https訪問的狀況下,讓服務器自動把http的請求重定向到https。 在服務器這邊的話配置的話,能夠在頁面里加js腳本,也能夠在後端程序裏寫重定向,固然也能夠在web服務器來實現跳轉。Nginx是支持rewrite的(只要在編譯的時候沒有去掉pcre) 在http的server裏增長rewrite ^(.*) https://$host$1 permanent; 這樣就能夠實現80進來的請求,重定向爲https了。
服務器配置
後臺服務原理:
2.接下來配置服務器(以官方三木聊天室demo爲例)
2.1 nginx 配置
server {
listen 443;
server_name www.lovmin.cn; #填寫綁定證書的域名
ssl on;
ssl_certificate 1_www.lovmin.cn_bundle.crt;#下載好的證書文件
ssl_certificate_key 2_www.lovmin.cn.key;#下載好的證書文件
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置
ssl_prefer_server_ciphers on;
location / {
proxy_pass localhost:5757;#node服務器地址與端口,由於同一臺服務器故使用localhost
}
}
2.2 聊天室 server服務配置
注意:window server 配置文件須要手動 sdk.config 建立到 C:\qcloud\sdk.config
{
"serverHost": "www.zhangximufeng.com",//服務器域名
"authServerUrl": "http://10.141.19.17:8000/",//鑑證服務器地址(其實就是apache服務器地址)
"tunnelServerUrl": "https://ws.qcloud.com",//這個能夠不改,信道服務器地址
"tunnelSignatureKey": "7fb7d1c161b7ca52d73cce0f1d833f9f5b5ec89",//隨機碼
"networkTimeout":30000//可不改
}
參考文檔地址:
demo 源碼
2.3 apache 服務器(鑑證服務器)配置及數據庫設計
鑑證服務器
下載官方 會話服務器源碼
會話服務器的源碼
選擇合適的方式部署 Wafer 服務後,按照部署類型:
· 自動部署 - 無需進行任何操做,會話服務器已經能夠使用
· 鏡像部署 - 按照下面步驟進行初始化工做
· 自行部署 - 按照下面步驟進行初始化工做
環境準備
確保機器中已安裝 WAMP 環境。Linux server 能夠選擇安裝LAMP 環境
代碼部署
把本項目代碼部署到 /opt/lampp/htdocs/mina_auth 目錄中。
自動建表
執行下面命令建立運行時所需表:
/opt/lampp/bin/mysql -u root -p mypassword < /opt/lampp/htdocs/mina_auth/system/db/db.sql
初始化 appId 和 appSecret
登陸到 MySql 後,手動插入配置到 cAuth 表中。
/opt/lampp/bin/mysql -u root -p root #登陸本地mysql
use cAuth;
insert into cAppinfo set appid='Your appid',secret='Your secret';
測試服務可用性
curl -i -d'{"version":1,"componentName":"MA","interface":{"interfaceName":"qcloud.cam.id_skey","para":{"code":"001EWYiD1CVtKg0jXGjD1e6WiD1EWYiC","encrypt_data":"DNlJKYA0mJ3+RDXD/syznaLVLlaF4drGzeZvJFmjnEKtOAi37kAzC/1tCBr7KqGX8EpiLuWl8qt/kcH9a4LxDC5LQvlRLJlDogTEIwtlT/2jBWBuWwBC3vWFhm7Uuq5AOLZV+xG9UmWPKECDZX9UZpWcPRGQpiY8OOUNBAywVniJv6rC2eADFimdRR2qPiebdC3cry7QAvgvttt1Wk56Nb/1TmIbtJRTay5wb+6AY1H7AT1xPoB6XAXW3RqODXtRR0hZT1s/o5y209Vcc6EBal5QdsbJroXa020ZSD62EnlrOwgYnXy5c8SO+bzNAfRw59SVbI4wUNYz6kJb4NDn+y9dlASRjlt8Rau4xTQS+fZSi8HHUwkwE6RRak3qo8YZ7FWWbN2uwUKgQNlc/MfAfLRcfQw4XUqIdn9lxtRblaY="}}}' http://127.0.0.1/mina_auth/
按照源碼 db.sql 文件 創建數據庫
數據庫設計
全局信息表 cAppInfo 保存會話服務所須要的配置項。
Field
Type
Null
key
Extra
appid
varchar(200)
NO
PRI
申請微信小程序開發者時,微信分配的 appId
secret
varchar(300)
NO
申請微信小程序開發者時,微信分配的 appSecret
login_duration
int(11)
NO
登陸過時時間,單位爲天,默認 30 天
session_duration
int(11)
NO
|
|
|
|
會話過時時間,單位爲秒,默認爲 2592000 秒(即30天) |
會話記錄 cSessionInfo 保存每一個會話的數據。
Field
Type
Null
key
Extra
id
int(11)
NO
MUL
uuid
varchar(100)
NO
會話 uuid
skey
varchar(100)
NO
會話 Skey
create_time
datetime
NO
last_visit_time
datetime
NO
open_id
varchar(100)
NO
MUL
session_key
varchar(100)
NO
微信服務端返回的 `session_key` 值
user_info
varchar(2048)
YES
已解密的用戶數據
|
會話 ID(自增加)
|
|
|
會話建立時間,用於判斷會話對應的 open_id 和 session_key 是否過時(是否超過
cAppInfo
表中字段
login_duration
配置的天數)
|
最近訪問時間,用於判斷會話是否過時(是否超過
cAppInfo
表中字段
session_duration
的配置的秒數)
|
微信服務端返回的
open_id
值
|
|
|
建數據庫的詳細 SQL 腳本請參考 db.sql
搭建會話管理服務器
服務器配置注意:
一、會話服務器源碼中鏈接mysql數據庫的用戶名密碼確保與數據庫保持一致
二、sdk.config文件在不一樣server系統中位置不一樣,具體位置請閱讀sdk源碼config.js文件
三、sdk.config文件中不能有註釋(後面會把字符串轉對象)
小程序客戶端配置
demo 地址:github.com/tencentyun/…
/**
* 小程序配置文件
* config.js
*/
// 此處主機域名修改爲騰訊雲解決方案分配的域名
var host = 'www.lovmin.com';
var config = {
// 下面的地址配合雲端 Demo 工做
service: {
host,
// 登陸地址,用於創建會話
loginUrl: `https://${host}/login`,
// 測試的請求地址,用於測試會話
requestUrl: `https://${host}/user`,
// 測試的信道服務地址
tunnelUrl: `https://${host}/tunnel`,
}
};
module.exports = config;
開發者設置