njs最详细的入门手册:Nginx JavaScript Engine

Nginx JavaScript (njs) 是一个嵌入式的 JavaScript 解释器,用于在 Nginx HTTP 和 Stream 模块中编写动态脚本。njs 提供了一种灵活的方式来扩展 Nginx 的功能,而无需编译复杂的 C 模块。以下是一个详细的 njs 入门手册。

安装 njs

njs 通常与 Nginx 一起发布,但你可能需要确保你的 Nginx 版本支持 njs。你可以从源代码编译 njs,也可以通过包管理器安装。

从源代码编译
  1. 下载并编译 njs:

    git clone https://hg.nginx.org/njs
    cd njs
    ./configure
    make
    sudo make install
    
  2. 下载并编译 Nginx,启用 njs 模块:

    git clone https://github.com/nginx/nginx.git
    cd nginx
    ./auto/configure --add-module=../njs/nginx
    make
    sudo make install
    
使用包管理器安装

在基于 Debian 的系统(如 Ubuntu)上:

sudo apt-get install nginx-module-njs

在基于 Red Hat 的系统(如 CentOS)上:

sudo yum install nginx-module-njs

配置 njs

确保在 Nginx 配置文件中启用 njs 模块。

load_module modules/ngx_http_js_module.so;

然后,在 Nginx 配置文件中添加 js_include 指令来引入 JavaScript 文件。

http {
    js_include /path/to/script.js;
    ...
}

编写 njs 脚本

创建一个简单的 njs 脚本,例如 script.js

function hello(r) {
    r.return(200, "Hello, njs!");
}

export default {hello};

在 Nginx 中使用 njs 脚本

在 Nginx 配置中调用 njs 脚本:

http {
    js_include /path/to/script.js;

    server {
        listen 80;

        location /hello {
            js_content hello;
        }
    }
}

重启 Nginx:

sudo systemctl restart nginx

现在,访问 http://your_server_ip/hello 将返回 “Hello, njs!”.

njs 常用 API

njs 提供了一些常用 API 来处理请求和响应。以下是一些基本示例:

处理请求头
function log_headers(r) {
    for (var header in r.headersIn) {
        r.log(header + ": " + r.headersIn[header]);
    }
    r.return(200, "Check the logs for request headers.");
}

export default {log_headers};
设置响应头
function set_headers(r) {
    r.headersOut['Content-Type'] = 'text/plain';
    r.return(200, "Headers set!");
}

export default {set_headers};
处理查询参数
function get_query_param(r) {
    var param = r.args['param'] || 'default';
    r.return(200, "Query parameter: " + param);
}

export default {get_query_param};

调试 njs

使用 r.log 方法记录调试信息:

function debug_example(r) {
    r.log("Debugging njs script");
    r.return(200, "Check the logs for debug info.");
}

export default {debug_example};

查看 Nginx 错误日志以获取调试信息:

sudo tail -f /var/log/nginx/error.log

进阶使用

njs 支持更多高级功能,如子请求、变量操作、事件处理等。以下是一些进阶示例:

发起子请求
function subrequest_example(r) {
    r.subrequest('/other', function(reply) {
        r.return(200, "Subrequest response: " + reply.responseText);
    });
}

export default {subrequest_example};
操作 Nginx 变量
function variable_example(r) {
    var var_value = r.variables.my_variable || 'not set';
    r.return(200, "Variable value: " + var_value);
}

export default {variable_example};

参考资料

通过以上内容,你可以快速入门 njs 并开始使用它来扩展 Nginx 的功能。如果有任何问题或需要进一步帮助,请随时提问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

完颜振江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值