使用 javascript 配置 nginx

使用 javascript 配置 nginx

在上个月的 nginx.conf 2015 大会上, 官方宣布已经支持通过 javascript 代码来配置 nginx,并把这个实现称命名为——nginscript。使用 nginscript,可以很轻易得在 niginx 配置文件中通过 js 语法来实现自定义的服务器配置。

安装

# 下载最新版本的 nginx 并解压
curl -O http://nginx.org/download/nginx-1.9.5.tar.gz
tar -xzvf nginx-1.9.5.tar.gz

# 下载 nginscript 模块并解压 curl -O http://hg.nginx.org/njs/archive/tip.tar.gz tar -xzvf tip.tar.gz # 编译并安装 nginx $ cd nginx-1.9.5 $ ./configure --add-module=刚才解压的nginscript目录 $ make $ make install 

在 nignx.conf 中使用 nginscript

定义变量

使用 js_set 指令可以通过 javascript 代码来定义一个变量:

js_set $msg "
   var m = 'Hello ';
   m += 'world!';
   m;
";

这些变量可以被其他的 nginx 指令使用:

location /hello {
    add_header Content-Type text/plain;
    return 200 $msg;
}

执行 javascript 代码片段

使用 js_run 指令可以执行指定的 javacript 代码:

location /hello {
    js_run "
        var res;
        res = $r.response;

        res.contentType = 'text/plain';
        res.status = 200;
        res.sendHeader(); res.send( 'Hello, world!' ); res.finish(); "; } 

请求对象

在 javascript 代码中可以通过 $r 变量来获取到请求对象,请求方相关信息都会保存在这个变量上:

js_set $summary "
    var a, s, h;

    s = 'Request summary\n\n'; s += 'Method: ' + $r.method + '\n'; s += 'HTTP version: ' + $r.httpVersion + '\n'; s += 'Host: ' + $r.headers.host + '\n'; s += 'Remote Address: ' + $r.remoteAddress + '\n'; s += 'URI: ' + $r.uri + '\n'; s += 'Headers:\n'; for (h in $r.headers) { s += ' header \"' + h + '\" is \"' + $r.headers[h] + '\"\n'; } s += 'Args:\n'; for (a in $r.args) { s += ' arg \"' + a + '\" is \"' + $r.args[a] + '\"\n'; } s; "; 

response 响应对象

在 javascript 代码中可以通过 $r.response 来获取到响应对象,用于设置响应内容:

js_run "
    var res = $r.response;

    res.contentType = 'text/plain'; res.status = 200; res.sendHeader(); res.send( 'Hello, world!' ); res.finish(); "; 

nginscript 与 javascript 的区别

nginscript 不是完整的 javascript,它只是是实现了一个 ECMAScript 的一个子集, 为了追求效率, 许多 javascript 的内置对象在 nginscript 中并没有实现。我尝试使用了一下 Date、JSON 等对象,都还没有实现。

这便是几乎所有的 nginscript 知识,虽然没有实现完整的 EMCAScript 规范,但是对于配置 nginx 来说,个人感觉也够用了。

posted on 2016-04-12 21:14 Rhett_Web 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/rhett-web/p/5384510.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值