利用nodejs搭建https服务器

上篇文章《使用openssl创建https证书》我们了解了如何生成https证书,这篇文章带着大家用nodejs搭建一个https服务器,其实前面有发过《用nodejs的http模块创建一个简单的静态资源服务器》,大家可以对比着了解一下https服务器与http的区别。

首先我们用上篇文章生成的https证书结合nodejs来搭建一个https服务,代码如下:app.js

const express = require("express")const app = express();const https = require("https");const fs = require("fs");const options = {    key:fs.readFileSync('./server.key'),    cert:fs.readFileSync("./server.crt")}
app.get("/",(req,res)=>{    res.send("hello world");})
const server = https.createServer(options,app);
server.listen(3000,()=>{console.log("running")})

阅读上面的代码,我们在这里使用了nodejs的https模块开启https服务,https模块的使用和http模块使用只有一点不同,那就是https开启服务要证书。

关于用http模块搭建服务的文章可以看这里,https开启服务器需要传递一个options参数,参数形式是一个对象,这个对象有两个重要的属性,key属性代表服务端的私钥,cert代表CA机构颁发给服务器的证书。其他使方式和http模块完全一样,这里为了简化服务器的搭建我们借助了express框架。

执行 node app.js,访问https://localhost:3000/,在谷歌浏览器中会出现如下界面:

出现这个界面是因为我们的根证书没有权威性,与根证书相对应的公钥没有被植入到各大操作系统和浏览器中,所以浏览器认为我们的网站使用虚假证书,不安全,这里忽略就可以了,现实环境我们的网站不会使用自签名证书的,这里只是测试,点击高级按钮,出现如下界面:

点解继续前往即可,这时我们就可以访问我们的网站了,如图

这时发现地址栏有一个危险标识,直接忽略即可。

https服务搭建完了,接着在此基础上我们搭建一个https的静态文件服务器,代码修改如下:

const express = require("express")const app = express();const https = require("https");const fs = require("fs");const options = {    key:fs.readFileSync('./server.key'),    cert:fs.readFileSync("./server.crt")}
app.get("/",(req,res)=>{    res.send("hello world");})app.use(express.static("./public"))
const server = https.createServer(options,app);server.listen(3000,()=>{console.log("running")})

仔细阅读源码,我们这里使用了express自带的中间件express.static,通过这个中间件我们将public这个文件的静态资源发布到了服务器上,这样就搭建了一个https的静态服务器。

总结一下:本篇文章我们结合上一篇文章得到的https证书、nodejs的https模块、express框架搭建了一个https服务器,并且通过使用express的中间件express.static将其配置成了一台静态资源服务器。

本篇文章知识点不多,全是实际操作,大家可以亲手操作一下,本来想将下一篇文章的内容和本篇合并,但考虑到文章太长导致重点不突出,读者水平不同,故拆分为两篇,大家见谅。

下篇文章我们将根据本篇文章搭建的服务器来聊一聊http1.1的缺点。只有了解了其不足之处,我们才能改进。

如果你有什么意见或者想法欢迎留言。

本文分享自微信公众号 - nodejs全栈开发(geekclass)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java工会

Caffeine Cache 进程缓存之王

互联网软件神速发展,用户的体验度是判断一个软件好坏的重要原因,所以缓存就是必不可少的一个神器。在多线程高并发场景中往往是离不开cache的,需要根据不同的应用场...

8120
来自专栏无道编程

【学习笔记】ES6新的语法

5900
来自专栏DevOps持续集成

谈DevOps平台落地:前端构建怎么这么复杂

题记:DevOps 平台通常搭建于内网环境,不能直接外网,所以,如果你也要在内网环境构建前端,就一定会遇到本文所说的问题。

8700
来自专栏码匠的流水账

聊聊rocketmq的AccessChannel

rocketmq-client-4.5.2-sources.jar!/org/apache/rocketmq/client/AccessChannel.java

7300
来自专栏Nodejs技术栈

Node.js 环境性能监控

作者:@LucasTwilight https://juejin.im/post/5c71324b6fb9a049d37fbb7c

18600
来自专栏前端资源

WebStorm怎么设置实现自动编译less文件

首先,需要保证电脑安装过Node.js,下载地址:https://nodejs.org/en/

5300
来自专栏腾讯云serverless的专栏

Node部署和运维工作量降低80%,腾讯NOW直播是怎么做到的?

上一篇文章,分享了《NGW,前端新技术赛场:Serverless SSR 技术内幕》,本篇文章,将分享腾讯NOW直播在Serverless技术的探索实践。 一...

18340
来自专栏一番码客

electron概述

概述优点:缺点与 Python 前后台的构架对比:环境搭建第一个 electron 程序参考文档

8030
来自专栏陶士涵的菜地

[Linux]gocron定时任务平台的部署

采用二进制文件的方式部署非常简单,因为go已经把源码打包成了可执行文件,下载下来直接运行就可以了,不需要自己去编译和配置依赖

9200
来自专栏前端资源

PHPStorm 如何更改文件的打开方式

打开选项 Preferences > Editor > File Types 找到jade,在其Registered Patterns里添加对应的文件识别规则,...

9700

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励