在 AMH 面板中使用 Node.js 的一些记录
前言
最近开始接触 Node.js,做一些记录,方便日后查找
测试环境
- 基础环境是一台装了 Debain9 的 VPS
预期未来会将 Node.js 的项目和 PHP 的项目部署在一起,所以搭建测试环境的逻辑如下
- 使用 AMH 面板搭建基础的 LNMP 环境,在此基础上增加 Node.js 的环境,这样可以复用 AMH 提供的各种管理能力和插件体系
- 既然已经有了 Nginx,那么就可以顺带用 Nginx 反代 Node.js
- 所以这篇文章可以简单总结为 “如何在 AMH 面板中部署并用好 Node.js 环境”
在 VPS 中使用 NVM 安装 Node.js
- AMH 面板的软件中心曾经出现过 Node.js 的身影,不过已经是 N 个大版本之前的事情了
- 此时此刻,想要在 AMH 中使用 Node.js,只能手搓了
安装过程如下
- 下载并运行脚本
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
- 设置环境变量
source ~/.profile
- 列出所有可用的 Node.js 版本
nvm ls-remote
- 选择一个版本安装,nvm install
,例如
nvm install v16.17.0
- 指定使用该版本
nvm use v16.17.0
关于 NVM 的更多介绍,可以参见:https://github.com/nvm-sh/nvm
使用 Nginx 反代 Node.js
- 引用自这篇文章:https://xuexb.github.io/learn-nginx/example/nodejs-proxy.html
- 在 AMH 的 AMWrite 中增加规则,根据需求增减
# 由于下面配置了文件不存在则代码到 Node.js 中,那么直接访问目录(不带默认主页)的话会有问题,这里做下判断
# 如果访问目录下有 index.html 文件,则直接重写到该文件
# break 表示重写且停止,但 url 不变,而 permanent 表示301重定向,url 会更新
if ( -f $request_filename/index.html ){
rewrite (.*) $1/index.html break;
}
# 如果请求的文件不存在,则代理到 Node.js
if ( !-f $request_filename ){
rewrite (.*) /index.js;
}
# 代理node服务 8001
location = /index.js {
# 设置一些代理的header信息,这些信息将被透传到 Node.js 服务的header信息里
proxy_set_header Connection "";
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_set_header X-NginX-Proxy true;
# 代理服务
proxy_pass http://127.0.0.1:8001$request_uri;
# 忽略其他重写
proxy_redirect off;
}