给你的 Node.js 项目部署 HTTPS

3,975 阅读3分钟

最近上线了一个面向前端领域技术干货的邮件订阅服务,全站启用了HTTPS,于是有了这篇文章来分享一下我是如何部署HTTPS的。

什么是HTTPS

简单的来讲HTTPS是HTTP的安全加强版,HTTPS以加密数据的方式,可以防止数据在传输过程中杯窃取,也可以在正个信息传递的过程中维护数据的完整性。从HTTPS的英文全写来看 Hyper Text Transfer Protocol over Secure Socket Layer 我们就可以知道,它是在HTTP的基础上增加了一把小锁。


关于HTTPS的论述,网路上有非常多的资料,建议大家去搜索阅读一下。(这里就不废话了,直接看如何给你的网站部署HTTPS吧)

验证以及如何申请证书

你可以在 https://www.sslforfree.com/ 中来申请免费的SSL证书(三个月免费,在到期之前sslforfree会发邮件通知你来更换证书)。

查看图片

你只需要在这里输入你的域名,然后将验证文件上传到你的静态服务器中,sslforfree 验证通过之后,就会提供三个文件让你下载,放心的打包下载这三个文件吧(不要忘记了输入email和password,让 sslforfree 来通知你更换证书)。

使用HTTPS来开启网站服务器

接下来你需要在你的Node.js代码中使用https模块来替换掉原http模块,并且将 sslforfree 提供给你的私钥与证书,加载进去。

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync(path.resolve(__dirname,'ssl/privatekey.pem')),
  cert: fs.readFileSync(path.resolve(__dirname,'ssl/certificate.crt'))
};

https.createServer(options,app.callback()).listen(8082);

配置Nginx

最后这一步,主要是配置一下nginx代理。因为你的Node.js服务并不是直接暴露在公网的,而是以本地的方式跑在内网中,你需要Nginx帮你转发到具体的Node.js 服务上。

首先你需要做的是将证书与私钥上传到你的服务器上(至于什么方式都可以,Git FTP),位置可以随便放(为了统一记住,建议你可以跟你的nginx配置文件放在一起)。

接着考虑到现在的用户很少会把域名打全,所以访问HTTP时需要将HTTP转发到HTTPS。


server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}

当然你启动了SSL后你就需要使用443端口了,所以你还需要配置一个server来转发到内网的Node.js 服务上。

server {
    listen 443;
    server_name example.com www.example.com;
    ssl on;
    ssl_certificate  /var/nginx/certs/certificate.crt;
    ssl_certificate_key /var/nginx/certs/privatekey.pem;
    location / {
        proxy_pass https://127.0.0.1:3000
    }
}

如何在浏览器上开启绿色的锁

当你配置好上述两步的时候用浏览器访问你的网站,你会发现并没有出现绿色的小锁。这是因为,你的资源没有启用HTTPS。资源,包括了图片,文件,不包括a链接。


最后

《课多周刊》邮件订阅服务

《课多周刊》内容起于前端而非止于前端,精选一周前端领域的技术干货,每周一发送,完全免费。

访问地址:https://w3crange.com

早读课提醒

言归正传我们在微信群中推出了《早读课》,每日分享一篇我们认真精选的文章(不限于前端开发类),其目的是帮助开发者来学习有价值的东西。想加微信群的朋友,直接添加我的微信号:icepy_1988,审核之后会邀请你入群。想加QQ群的朋友,可以直接添加:418898836,答对问题即可入群。

关注我们

更多精彩内容可关注微信公众号:搜索 fed-talk ,来关注我们吧,也欢迎你将它分享给自己的朋友。

查看图片