对于Node.js应用程序来说,安全、快速、强壮的生产环境对于用户体验来说至关重要。这篇帮助基于一台Ubuntu 20.04云服务器,介绍Node.js生产环境的部署方法,供Node.js系统管理员参考。
设置防火墙
防火墙可以确保只有指定的端口能够接收或发送数据,以减少服务器被攻击的风险。
安装防火墙。
$ sudo apt-get install ufw
允许必要的端口。
$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw allow 22
启用防火墙并查看状态。
$ sudo ufw enable
$ sudo ufw status
创建应用程序
该应用程序使用Express.js框架,配合使用Helmet.js组件安全加固。安装Helmet.js组件。
$ npm i --save helmet
Node.js应用程序代码如下,文件名为server_file.js。
const express = require("express");
const helmet = require("helmet");
const app = express();
app.use(helmet());
app.listen(8080);
接下来,安装PM2来让Node.js应用程序以背景进程来运行。PM2可以在应用程序意外中止时重启,同时管理应用程序日志和监控应用程序性能。
$ sudo npm install pm2 -g
$ pm2 start server_file.js
$ pm2 startup
设置Nginx
Nginx是一款在生产环境中广泛使用的Web服务器,部署方便、运行快速、稳定强壮。Nginx集中管理全部HTTP请求,同时整合SSL、缓存、反向代理,Node.js应用程序得以自由扩展。
安装Nginx。
$ sudo apt-get install nginx
验证Nginx是否运行。
$ sudo systemctl status nginx
Active: active (running)
编辑Nginx配置文件,把HTTP请求重定向到HTTPS请求。其中example.com需要替换为实际域名。
# redirect HTTP traffic to HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
# HTTPS server
server {
listen 443 ssl;
server_name example.com;
access_log /var/log/nginx/example.com.log;
ssl_certificate /path/to/certificate/example.com.crt;
ssl_certificate_key /path/to/key/example.com.key;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:8080; # Node.js Application
}
}
重启Nginx使之生效。
$ sudo systemctl restart nginx
最后用浏览器访问:https://example.com 。如果能够正常访问,说明Node.js应用程序已成功部署。