前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >给 nginx 安装 njs 模块以支持 JavaScript 编程

给 nginx 安装 njs 模块以支持 JavaScript 编程

原创
作者头像
Developers
发布2022-04-02 10:24:34
6.5K0
发布2022-04-02 10:24:34
举报
文章被收录于专栏:专栏笔记专栏笔记

一、了解 njs

njs scripting language 是 nginx 官方推出的一个基于 JavaScript 的扩展,类似 ngx_lua (openresty) 模块,启用后可以通过 JS 脚本来扩展 nginx 功能。

njs 只支持部分 JS 语法,但也足以实现自定义鉴权、修改请求&响应、A/B Test、缓存控制、加解密、子请求等网关功能,值得一试。

njs 官网页面链接:https://nginx.org/en/docs/njs/index.html

二、编译安装 njs

安装 njs 和安装其他模块一样。

这里介绍编译成动态模块通过 load_module 加载。

1、首先查看当前 nginx 版本。

代码语言:javascript
复制
nginx -v

下载对应版本的 nginx 源码并解压。

https://nginx.org/en/download.html

2、下载 njs 源码并解压。

https://github.com/nginx/njs

3、分别解压,进入 nginx 源码目录。

代码语言:javascript
复制
cd nginx-1.20.2

4、查看和复制当前使用 nginx 编译参数(即 configure arguments: 后面那部分)。

代码语言:javascript
复制
nginx -V

5、配置编译参数。

代码语言:javascript
复制
./configure 刚才复制的编译参数 --add-dynamic-module=njs解压地址/nginx

6、编译。

代码语言:javascript
复制
make modules

7、编译完成后在当前 nginx 源码目录的 objs 目录下会有 njs 的两个模块文件。

代码语言:javascript
复制
ngx_http_js_module.so
ngx_stream_js_module.so

8、复制 so 文件到 nginx 安装目录(即 nginx -V 查看的 --prefix 参数)的 modules 目录下。

9、在 nginx.conf 文件添加代码载入需要的模块。

代码语言:javascript
复制
load_module modules/ngx_http_js_module.so;

10、完成配置,重启 nginx 即可。

三、测试 njs

1、创建测试文件 /etc/nginx/njs/test.js 写入代码:

代码语言:javascript
复制
function summary(r) {
    var a, s, h;

    s = "JS summary\n\n<pre>";

    s += "Time: " + new Date().toLocaleString() + "\n";
    s += "Method: " + r.method + "\n";
    s += "HTTP version: " + r.httpVersion + "\n";
    s += "Host: " + r.headersIn.host + "\n";
    s += "Remote Address: " + r.remoteAddress + "\n";
    s += "URI: " + r.uri + "\n";

    s += "Headers:\n";
    for (h in r.headersIn) {
        s += "    " + h + ": " + r.headersIn[h] + "\n";
    }

    s += "Args:\n";
    for (a in r.args) {
        s += "    " + a + ": " + r.args[a] + "\n";
    }

    s += "\n\n</pre>";

    r.return(200, s);
}

function header(r) {
    r.headersOut['content-type'] = 'text/html';
}

export default {summary, header};

2、在 nginx.conf http 段添加配置。

代码语言:javascript
复制
js_path '/etc/nginx/njs/';

js_import 'test.js';

server {
	listen 8000;

	location / {
		js_header_filter test.header;
		js_content test.summary;
	}
}

3、重启 nginx 并打开 http://127.0.0.1:8000/ 即可看到 njs 返回的页面。

四、学习 njs

使用 njs 边缘脚本可以减轻后端压力,甚至代替鉴权网关,值得一学。

官网: https://nginx.org/en/docs/njs/index.html

例子: https://github.com/nginx/njs-examples/

njs 内置对象: https://nginx.org/en/docs/njs/reference.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、了解 njs
  • 二、编译安装 njs
  • 三、测试 njs
  • 四、学习 njs
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档