您当前的位置:首页 > 网站建设 > 网站维护
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery |

利用njs模块在nginx配置中引入js脚本

51自学网 2022-07-06 11:25:08
  网站维护

前言

由于许多 web 开发并不熟悉 lua 语言. 因此 nginx 推出了 njs 模块, 可以在 nginx 的配置中引入 js 脚本, 从而实现一些更复杂的 nginx 配置功能.

以下介绍 njs 模块的特性和用法

一 安装 NJS 模块

要求 nginx 的版本大于 1.9.11, 因为从该版本才开始支持 load_module 指令

方法一: 动态加载 NJS 模块

注意: 不同版本的 nginx 需要相应版本的 NJS 模块.

  • 将 ngx_http_js_module.so 文件放在nginx 根目录的 modules 目录下,
  • 在 nginx.conf 中增加引入模块
load_module modules/ngx_http_js_module.so;load_module modules/ngx_stream_js_module.so;

方法二: 编译时增加模块

下载源码 https://hg.nginx.org/njs/?_ga=2.99259804.301589667.1638621670-451035464.1638621670

该仓库在mercurial中管理, 需要使用 hg 命令下载源码

hg clone  http://hg.nginx.org/njs

nginx 编译时增加如下配置

./configure --add-module=<path to njs>/njs/nginx

二 NJS模块运行环境的特点

NJS 模块并不是运行一个 Nodejs, 因此 nginx js 只能像 lua 模块一样作为 nginx 的一个中间件, 无法独立作为一个完整的后台服务.

与前端同学熟悉的 node 或浏览器中运行环境不同. njs 并没有使用 v8 解析引擎, nginx 官方基于 ECMAScript 语言规范定制了一个解析引擎. 因此支持的语法和特性也与标准有所不同.

1. 每次请求时创建运行时环境, 请求结束时销毁

node 运行时启动的虚拟机是常驻内存的, 且该虚拟机运行时会自动完成内存的垃圾回收.

而 NJS 会在每次请求时创建一个新的虚拟机并分配内存, 在请求结束时销毁该虚拟机并释放内存.

2. 非阻塞代码执行

njs 采用事件驱动模型对 NJS 运行时环境进行调度。当 NJS 执行阻塞操作(例如读取网络数据或发出外部子请求)时,Nginx 会挂起当前 NJS VM 的执行,并在事件完成时重新调度。因此 NJS 的代码可以以简单的线性方式来写

3. 只支持部分 ECAMA 规范的语法

NJS 基于ECMAScript 5.1 规范, 并支持 ECMAScript 6 中的部分函数

支持的语法列表 https://nginx.org/en/docs/NJS/compatibility.html?_ga=2.91935000.301589667.1638621670-451035464.1638621670

4. 集成请求处理过程

Nginx 对请求的处理包含多个阶段. Nginx的指令通常在某个指定的阶运行对请求进行处理. Nginx 的模块也正是利用这个能力, 来调试或修改一个请求.

NJS 模块也是通过指令的形式, 实现在特定的阶段运行 js 代码逻辑.

三 NJS 模块支持的指令及对应的处理阶段

处理阶段 HTTP 模块 Stream 模块
Access
下载地址:
Nginx纯配置实现日志实时上报的思路与方法
使用Docker部署Spring&nbsp;Boot项目的实现步骤
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1