如何使用nginscript
导读:本文共2336字符,通常情况下阅读需要8分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: nginx主要可以做以下几点:1、工作在tcp第七层,可以对http协议的所有内容进行分析和处理。2、支持lua,perl,javascript动态语言3、支持第三方插件再说说nginscript1、 nginscript是javascript/ecmascript的子集 。它实现了大部分的javascript语言的能力,没有完全遵从ecmascript标准,同... ...
目录
(为您整理了一些要点),点击可以直达。nginx主要可以做以下几点:
1、工作在tcp第七层,可以对http协议的所有内容进行分析和处理。
2、支持lua,perl,javascript动态语言
3、支持第三方插件
再说说nginscript
1、 nginscript是javascript/ecmascript的子集 。它实现了大部分的javascript语言的能力,没有完全遵从ecmascript标准,同时抛弃了javascript比较难懂的部分。
2、 nginscript不是通过v8引擎实现的 。而是通过一个更小、能耗更低、更符合nginx应用场景的小虚拟机(vm)来实现。可以理解为nginx为其实现了一套自己的词法解析。
3、 nginscript是跑在nginx的配置文件里 。 比如:nginx.conf文件里。所以nginscript可以完成传统配置文件所能处理的所有事情,同时可以让配置管理动态化。这也是nginscript出现的最重要的原因。
4、 nginscript 是以nginx插件的方式存在。 插件名叫: njs 。和其他nginx插件一样,我们需要重新编译nginx来完成安装。
5、 nginscript目前是早期研发状态 。大家可以通过邮件 等方式和nginx团队进行沟通和提出你的诉求。
如何安装nginscript
这里直接按照官方给出的步骤来就好:
// 1、下载最新nginx包,地址可见: wget //2、 解压 tar -xzvf nginx-1.9.4.tar.gz //3、通过mercurial获取nginscript模块,这里如果没有安装mercurial,需要先运行 yum install mercurial hg clone
//4、编译nginx,这里只具体了njs模块,其他需要的模块自己要记得一起装哦。如果你没编译过nginx,有些依赖模块需要yum安装,请自行搜索。 cd nginx-1.9.4 ./configure --add-module=../njs/nginx --prefix=/usr/local make make install ok,这就安装完了,我们可以开始玩啦。
具体如何使用nginscript
nginscript的使用主要是在nginx的配置体系里增加了2个指令。具体指令分别为:
js_set ,设置配置里的变量值
js_run ,直接执行配置规则
1、先看看 js_set 在nginx.conf里怎么运行的。
http{js_set$msg"varstr='hello,imweb';//javascriptstr;";server{...location/{return200$msg;}}}
结果:
上面例子里,可以看出,我们可以通过js随意地给nginx设置变量值。而这些变量是可以用在nginx配置的各个地方。比如:proxy_pass,limit_req_zone, and sub_filter。这里相对之前配置已经大大的提高了灵活性。
2、 js_run 的运行规则和场景
js_run 是运行在location指令里,匹配指定location的路径就会执行对应的javascript
js_run 是直接通过javascript来产生http返回的内容
下面举个具体的例子:
location/imwebteam{js_run"varres;res=$r.response;res.status=200;res.send('hello,imweb!');res.finish();";}
这个结果和第一个结果是一样的。这里就不赘述。
3、处理两个指令以外,还有个重要的变量 $r
通过 js_set 和 js_run 可以对http request请求有完整的控制权,控制的方式就是变量 $r 的使用。 $r 里有什么可以通过以下简单例子看到。
http{js_set$summary"vara,s,h;s='jssummary\n\n';s+='method:'+$r.method+'\n';s+='httpversion:'+$r.httpversion+'\n';s+='host:'+$r.headers.host+'\n';s+='remoteaddress:'+$r.remoteaddress+'\n';s+='uri:'+$r.uri+'\n';s+='headers:\n';for(hin$r.headers){s+='header\"'+h+'\"is\"'+$r.headers[h]+'\"\n';}s+='args:\n';for(ain$r.args){s+='arg\"'+a+'\"is\"'+$r.args[a]+'\"\n';}s;";server{listen8000;location/imwebteam{return200$summary;}}
结果如图:
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
如何使用nginscript的详细内容,希望对您有所帮助,信息来源于网络。