Hexo | 服务端大变样,Node.js 接管后台

Hexo | 服务端大变样,Node.js 接管后台

每每想到斥巨资购买的服务器只是用来部署一个静态博客网站,难免会觉得有些大材小用。考虑到自己经常会捯饬一些小应用,于是决定把服务端改造一下:用 Node.js 来搭建服务端,通过路由的方式来实现博客和应用的并存。

Node.js 环境

Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台,具有速度快、性能好的突出优点。不仅适合前端码农使用,对于后端也是个不错的选择。首先在服务器上配置 Node.js 环境:

sudo apt-get install nodejs
sudo apt-get install npm

Express 框架

Express 是一个简洁而灵活的 Node.js Web应用框架,可以帮助我们快速创建 Web 应用。首先安装 Express 和几个重要的模块:

npm install express -g
npm install body-parser -g
npm install cookie-parser --g
npm install multer -g

这里我们要用“骨架生成器” - express-generator 在 /home/ 目录下创建一个 Express 项目:

npm install express-generator -g
cd /home/
express nodeServer --view=pug

进入项目目录安装依赖项 npm install,就可以启动应用了:

npm start

在浏览器中输入网址 http://127.0.0.1:3000,看到“Welcome to Express” 字样就说明成功啦!

在 Express 中配置博客路由

假设我们的博客静态文件在 /home/hexoBlog,Express 工程在 /home/nodeServer,那么只需要这样修改 app.js 即可:

app.use(express.static(path.join(__dirname, '../hexoBlog/')));
app.use('/', indexRouter);

第一行的意思是将 ../hexoBlog/ 路径添加至静态目录,这句话相当于也是解析了 ‘/‘ 这个默认路径。第二行是 express-generator 自动生成的,意思是用 indexRouter 方法来处理默认路径。但是因为 Node.js 中间件函数是按顺序执行的,因此当我们访问 http://127.0.0.1:3000 时,会先从静态目录中读取博客主页,而不会使用 indexRouter 来处理请求。

重新运行一下 nodeServer,这时候访问 http://127.0.0.1:3000 应该就能看到我们的博客主页啦!

进程保护

Node.js 线程十分脆弱,一旦遇到运行错误便会严重到退出进程导致系统或应用瘫痪,这时候我们就需要 forever 帮助我们实现进程的重启:

npm install forever -g
cd /home/nodeServer
forever start .bin/www

这样我们就可以放心去玩耍啦!

如果想重启或者停止应用也很简单:

forever restart .bin/www
forever stop .bin/www

Nginx 反向代理

目前为止,我们的博客已经平稳运行在 http://127.0.0.1:3000,如果希望通过域名访问则可以通过 Nginx 进行反向代理:

sudo vim /etc/nginx/sites-available/default

关于 Nginx 部分的配置详见上一篇,不同的是我们添加了https的反向代理,首先定义了一个 upstream:

upstream nodejs_3000 {
server 127.0.0.1:3000;
keepalive 64;
}

然后在 server 中添加了对默认路径的设置:

server {
...

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://nodejs_3000;
}
}

重启 Nginx 服务,这样我们就可以通过自己购买的域名访问啦!

  0

评论

📧 邮箱: 留下邮箱,别人回复后会收到通知喔
😉 头像: 自动同步邮箱对应的「Gravatar」头像
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×