Nginx 的 Javascript 扩展

去年 Nginx 发布了 nginScript,一个基于 Nginx 的 JavaScript 执行环境

可以通过 nginScript 扩展自己的 Nginx 服务器的能力

Nginx 非常强大,通过各种指令可以定义出复杂的配置,但有时可能无法很好的满足我们的需求,毕竟 Nginx 团队和第三方社区开发的模块是有限的

可以自己开发 C 模块,但有一定门槛(腾云科技ty300.com),Nginx 希望为大家提供更加方便的扩展方式,便推出了 nginScript

nginScript 包含2部分:

1. JS VM, Nginx 自定义的JS虚拟机,根据自己的需求定制,轻便高效

2. 配置语法,可以让我们在 Nginx 配置文件中嵌入JavaScript代码片段

示例

  • 变量声明指令 js_set

修改配置文件 nginx.conf

http {

...

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

...

server {

...

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

...

}

}

保存配置,重启 nginx -s reload,浏览器中访问

通过 js_set 声明了变量 $msg,然后在 location 中调用

  • 执行指令 js_run

在 server 块儿中添加:

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

res.contentType = ‘text/plain‘;
        res.status = 200;
        res.sendHeader();

res.send( ‘test run‘ );
        res.finish();
    ";
}

执行效果

js_run 指令在内容生成阶段被执行, 仅能在 location 块中使用

  • 请求参数

http {

...

js_set $summary "
    var a, s, h;

s = ‘JS 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;
    ";

...

server {

...

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

...

}

...

}

在 http 块儿中、server块儿外定义变量 $summary,在 server 块儿中添加一个 location

$summary 的作用是演示如何访问各个请求参数,例如 $r.headers 可以访问头信息、$r.args 可以访问Url中的参数,还有上面的例子中使用 $r.response 获得了响应对象

执行效果

安装

$ mkdir -p ~/nginScript 
cd ~/nginScript
$ wget http://nginx.org/download/nginx-1.9.5.tar.gz
$ git clone https://github.com/nginScript/nginScript --depth=1
$ tar xfvz nginx-1.9.5.tar.gz
$ cd nginx-1.9.5
$ ./configure --add-module=../nginScript/nginx --prefix=$HOME/nginScript/nginx
$ make
$ make install

稿源:勤快学QKXue.NET

点击“阅读原文”查看 文章列表

时间: 2024-10-20 13:34:51

Nginx 的 Javascript 扩展的相关文章

FastDFS安装扩展篇——安装PHP、Apache及Nginx的FastDFS扩展【所有fastdfs文档】

FastDFS安装扩展篇——安装PHP.Apache及Nginx的FastDFS扩展 公司项目准备用fastdfs开始我就不知道这个是什么意思的,忙活了一个星期才大致明白,然后配置加使用,所有的东西都是从不懂到懂,前提是你要勇敢的面对他.东西就是让人用的,一个星期不会用,花费一个月的时间,只要刻苦钻研,一定会战胜的! 关于linux下如何安装FastDFS请参考:http://www.icultivator.com/p/4843.html 一.安装配置FastDFS支持PHP FastDFS不是

Javascript --扩展String实现替换字符串中index处字符

String.prototype.replaceCharAt = function(n,c){ return this.substr(0, n)+ c + this.substr(n+1,this.length-1-n); } Javascript --扩展String实现替换字符串中index处字符

VS2010 好用的javascript扩展工具

工具1) JScript Editor Extensions 折叠代码 下载地址: JScript Editor Extensions 工具2) Javascript parser 以树形方式查的代码定义与定位  下载地址:Javascript parser 菜单位置: 视图\其他窗口\Javascript Parser

【笔记】javascript扩展内建对象举例

一.在php中有一个叫做in_array()的函数,主要用于查询数组中是否存在某个特定的值. javascript中则没有一个叫做inArray()的方法.因此,通过Array.prototype来实现一个这样的功能: Array.prototype.inArray = function(needle){ for(var i = 0,len = this.length; i < len; i++){ if(this[i] === needle){ return true; } } return

javascript扩展时间方法,格式化,加减日期

/** *对Date的扩展,将 Date 转化为指定格式的String *月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, *年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) *例子: *(new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 *(new Date()).Format("yyyy-M-

Ionic4.x Javascript 扩展 ActionSheet Alert Toast Loading 以及 ionic 手势相 关事件

1.ActionSheet 官方文档:https://ionicframework.com/docs/api/action-sheet <ion-header> <ion-toolbar> <ion-buttons slot="start"> <ion-back-button defaultHref="/tabs/tab1"></ion-back-button> </ion-buttons> &

ExtJs 基础框架(二)Ext对JavaScript原生对象的扩展

1 Ext.onReady(function(){ 2 //Ext对于原生的JavaScript扩展 3 4 //一.Ext.Object 5 /*//1.Ext.chain 把当前传入对象当成新创建对象的原型 6 var obj = { 7 name:'bsjxt', 8 age:30 9 }; 10 obj.hasOwnProperty() 11 var result = Ext.Object.chain(obj); 12 alert(result.hasOwnProperty('name'

第十章:Javascript子集和扩展

本章讨论javascript的集和超集,其中子集的定义大部分处于安全考虑.只有使用这门语言的一个安全的子集编写脚本,才能让代码执行的更安全.更稳定.ECMScript3标准是1999年版本的,10年后,ECMAScript5规范的更新,由于ECMAScript标准规范是允许对其做任何扩充的,伴随着Mozilla项目的改进,Firefox1.0.1.5.2.3.和3.5版本中分别发布了javascript1.5.1.6.1.7.1.8.1.81版本,这些javascript的扩展版本已经融入到EC

JavaScript学习总结(十四)——JavaScript编写类的扩展方法

在?J?a?v?a?S?c?r?i?p?t?中?可以使?用?类的p?r?o?t?o?t?y?p?e属性来?扩?展?类的属?性?和?方?法,在实际开发当中,当JavaScript内置的那些类所提供的动态方法和动态属性不满足我们实际开发时,我们就可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性. 一.扩展JavaScript内置类,添加动态方法 语法格式: 类名.prototype.方法名 = function([param1],[param2],.