一、阿里云平臺購買證書养交,步驟參見阿里云SSL購買教程精算。
二、認證成功后下載證書
三碎连、將下載好的證書部署到服務器
根據(jù)自己的目錄結(jié)構(gòu)部署灰羽,本次新建soft目錄,在soft目錄下新建https文件夾鱼辙,并將下載的 xxx.key 和 xxx.pem部署到https文件夾下
四廉嚼、服務端 app.js文件中配置 https、http共存
const express = require("express")
const app = new express()
const net = require('net')
const fs = require("fs")
const https = require("https")
const http = require("http")
app.set("host","127.0.0.1")
//根據(jù)自己的目錄結(jié)構(gòu)配置文件
const options = {
key:fs.readFileSync("../soft/https/xxx.key","utf8"),
cert:fs.readFileSync("../soft/https/xxx.pem","utf8")
}
var httpsServer = https.createServer(options, app)
var httpServer = http.createServer(app)
const httpsPort = 3001
const httpPort=3002
// 監(jiān)聽https http 端口
httpsServer.listen(httpsPort)
httpServer.listen(httpPort)
// 創(chuàng)建服務器
net.createServer(function(socket){
socket.once('data', function(buf){
// buf 返回格式數(shù)組倒戏,如果https訪問怠噪,buf[0]為十六進制
// https數(shù)據(jù)流的第一位是十六進制 “16” ,轉(zhuǎn)換成十進制就是22
var address = buf[0] === 22 ? httpsPort : httpPort;
//創(chuàng)建指向https或http服務器的鏈接
var proxy = net.createConnection(address, function() {
proxy.write(buf);
//反向代理的過程峭梳,tcp接受的數(shù)據(jù)交給代理鏈接舰绘,代理鏈接服務器端返回數(shù)據(jù)交由socket返回給客戶端
socket.pipe(proxy).pipe(socket);
});
proxy.on('error', function(err) {
console.log(err);
});
});
socket.on('error', function(err) {
console.log(err);
});
},app).listen(3000);
// node創(chuàng)建的真實端口,此處設置為3000葱椭,3000端口需要在阿里云服務器的安全組中開啟才能使用捂寿,默認是80端口。
// 瀏覽器訪問: http://xxx.com:3000 https://xxx.xom:3000 孵运,兩種方式都可訪問