推荐在Linux下源码编译Nginx并静态集成官方njs模块,以实现轻量级服务端JS扩展;需安装编译依赖、下载匹配版本的Nginx与njs源码、配置--add-module=./njs/nginx后构建安装,并通过js_import/js_content启用脚本。

在 Linux 下通过源码编译 Nginx 并集成 njs 模块,是实现轻量级服务端 JavaScript 扩展(如请求改写、响应头注入、简单鉴权等)的推荐方式。njs 是 Nginx 官方维护的嵌入式 JS 引擎,不依赖 V8 或 Node.js,体积小、启动快、内存安全,适合与 Nginx 紧密协同。
确认环境与前置依赖
确保系统已安装基础编译工具和 OpenSSL 开发库:
- CentOS/RHEL:运行
yum groupinstall "Development Tools"和yum install openssl-devel pcre-devel zlib-devel - Ubuntu/Debian:运行
apt update && apt install build-essential libssl-dev libpcre3-dev zlib1g-dev - 检查 GCC 版本(建议 ≥ 4.8),执行
gcc --version - njs 模块需与 Nginx 主版本兼容,推荐使用同一发布周期的配套版本(例如 nginx-1.25.x 对应 njs-0.8.x)
下载并解压 Nginx 与 njs 源码
从官网获取匹配的源码包(避免用系统包管理器安装的二进制版):
- 进入临时目录,如
cd /tmp - 下载 Nginx:例如
wget https://nginx.org/download/nginx-1.25.3.tar.gz - 下载 njs:例如
wget https://github.com/nginx/njs/archive/refs/tags/0.8.3.tar.gz -O njs-0.8.3.tar.gz - 解压并重命名 njs 目录为
njs(Nginx 构建脚本默认识别该名称):tar -zxf nginx-1.25.3.tar.gztar -zxf njs-0.8.3.tar.gzmv njs-0.8.3 nginx-1.25.3/njs
配置编译参数并构建安装
进入 Nginx 源码目录,启用 njs 模块(静态内置,非动态加载):
cd nginx-1.25.3- 执行 configure(关键选项含
--add-module=./njs/nginx):./configure --prefix=/usr/local/nginx \<br> --with-http_ssl_module \<br> --with-http_v2_module \<br> --add-module=./njs/nginx \<br> --with-compat
- 运行
make && sudo make install - 验证是否成功:
/usr/local/nginx/sbin/nginx -V 2>&1 | grep -o 'njs'应输出njs
启用并测试 njs 脚本功能
修改 /usr/local/nginx/conf/nginx.conf,在 http 块中添加:
js_import main from /usr/local/nginx/conf/hello.js;
server {
listen 80;
location /hello {
js_content main.hello;
}
}
创建 /usr/local/nginx/conf/hello.js:
function hello(r) {
r.return(200, "Hello from njs at " + Date());
}
检查配置并重启:/usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload,访问 http://localhost/hello 即可看到响应。
注意:njs 不支持 require、console.log(可用 console.error 输出到 error_log)、DOM 或异步 I/O;所有逻辑需同步完成,适合处理请求上下文数据。










