MEAN项目的全站HTTPS (Express with Nginx)

MEAN项目

所谓的MEAN即是指技术栈为 MongoDB + Express + Angular + Nginx 的项目

SSL证书选择

在此篇文章中选用 Let's encrypt
可以使用官方提供的工具 certbot 部署证书

生成SSL证书

安装 certbot nginx

pacman -S certbot certbot-nginx nginx

由于使用了 Nginx,在此使用 certbot-nginx 进行部署

使用 certbot

如果没有使用Nginx,或者进行测试可以参考此步。

certbot certonly

选用 Standalone,填入域名信息,OK生成。
生成的证书在 /etc/letsencrypt/live/your.domain.com下

var sslPath = '/etc/letsencrypt/live/your.domain.com';
var ssl = { 
  key: fs.readFileSync(sslPath + '/privkey.pem'), 
  cert: fs.readFileSync(sslPath + '/fullchain.pem'),
  ca: fs.readFileSync(sslPath + '/chain.pem')
}

http.createServer(app).listen(process.env.PORT || 8000);
https.createServer(ssl, app).listen(process.env.PORT || 8443);

使用 certbot-nginx

  1. 配置Nginx
cd /etc/nginx
vi nginx.conf
server {
  listen        80;
  server_name   your.domain.com;
  
  location / {
      root html;
      index index.html index.htm;
  }   
}

:wq保存退出

  1. certbot-nginx 生成证书
certbot --nginx

工具会自动读取nginx的配置,按照提示进行下一步即可,很简单。
完成后会同时对nginx的配置进行添加,工具添加的配置条目都会有相应注释的后缀,可以自行查看。
有兴趣可以用 https://ssllabs.com/ssltest/analyze.html?d=your.domain.com 进行SSL的测试

重启 nginx

systemctl reload nginx.service

在浏览器中访问域名能看到绿色小锁就大功告成了。

MEAN项目的全站HTTPS (Express with Nginx)_第1张图片
HTTPS安全认证

SSL 证书定时更新

由于免费的 SSL 证书的有效期为 90 天,所以在过期时需要用工具刷新证书,方法如下:

certbot renew

这是最简单的刷新方法,会自动更新有效期小于 30 天的证书

借助 crontab

如果使用 crontab 进行刷新,官方建议间隔为 2 天,同时如果只想记录错误日志,可以使用 -q 或者 --quiet

certbot renew --quiet

钩子方法

使用钩子方法,可以帮助在刷新证书时起停服务。

certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

参考链接

Let's encrypt Express
Configuring Nginx and SSL with Node.js
Certbot User Guide
Deploying NodeJS using Express with NginX and Let's Encrypt
Express behind proxies

你可能感兴趣的:(MEAN项目的全站HTTPS (Express with Nginx))