关于node.js:Nodejs搭建Https服务

Node.js用于做小程序后盾服务,域名要求必须是Https协定。在Node.js开启Http服务是非常简单的,如下:

const http = require('http');
const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/html;charset=utf8' });
    res.end('拜访胜利')
});
server.listen(8080, () => {
    console.log('服务已开启');
})

如果想应用Https服务须要两步:1. 须要有一份SSL证书;2. 应用Node.js本身的Https模块。

SSL证书

获取SSL证书形式有两种:

  1. 本人借助openSSL工具生成SSL证书
  2. 下载某些平台提供的收费/付费的SSL证书(举荐)

我是应用某云平台提供收费的证书

点击下载后抉择服务器类型

下载后的文件别离是以.key、.pem为后缀,其中.key文件是base64加密私钥,.pem文件是base64加密的证书

应用Node.js本身的Https模块开启一个服务

相较Http,它多了一个options参数。

const https = require('https');
const fs = require('fs');
const path = require('path');
const options = {
    key: fs.readFileSync(path.join(__dirname, './ssl/9499016_www.linglan01.cn.key')),
    cert: fs.readFileSync(path.join(__dirname, './ssl/9499016_www.linglan01.cn.pem')),
};
const server = https.createServer(options, (req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/html;charset=utf8' });
    res.end('拜访胜利')
});
server.listen(8080, () => {
    console.log('服务已开启');
})

因为SSL证书我绑定的域名是www.linglan01.cn ,当我应用https://127.0.0.1:8080 拜访服务时与绑定的域名不相符,它会被拦挡拜访,仅容许 www.linglan01.cn 拜访。

应用域名为www.linglan01.cn 能力失常的拜访。

应用Express框架开启Https

工作中必定是应用社区的Express等框架进行开发,想在Express等框架中开启Https也非常容易,以Express举例:

const https = require('https');
const fs = require('fs');
const path = require('path');
const express = require('express')
const app = express();
app.get('/chat', (req, res) => {
    res.send('我是https')
});
const options = {
    key: fs.readFileSync(path.join(__dirname, './ssl/9499016_www.linglan01.cn.key')),
    cert: fs.readFileSync(path.join(__dirname, './ssl/9499016_www.linglan01.cn.pem')),
};
const server = https.createServer(options, app);
server.listen(8080, () => {
    console.log('服务已开启');
})

总结

Node.js中搭建Https服务不难,Node.js曾经为咱们提供了Https模块能够快捷的实现搭建。Https服务理论中仅会应用到线上环境,如果本地环境也须要,咱们也能够应用openSSL工具生成一个证书。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理