搜索
首页运维Nginxnginx的nginScript实例分析

nginx的nginScript实例分析

May 20, 2023 am 09:52 AM
nginxnginscript

先简单说说nginx

nginx [engine x]是全球最受欢迎,也是最优秀的web服务器、反向代理服务器。通过第三方公司的统计,目前全球至少有23%的服务器采用了nginx,当然这个数字还在不断的扩大。目前也是国内bat首选,所以这也是为什么我们第一时间关注到它的原因。

 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"
   var str = 'hello,imweb';
   // javascript str;
 ";
 server {
  ...
  location /{
   return 200 $msg;
  }
 }
}

结果:

nginx的nginScript实例分析 

上面例子里,可以看出,我们可以通过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 "
  var res;
  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 "
 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 {
 listen 8000;
 location /imwebteam{
  return 200 $summary;
 }
}

结果如图:

nginx的nginScript实例分析 

nginscript目前还存在的问题

经过上面的介绍,相信大家对nginscript已经有了基本的认识。那么我们在看看这个新生儿有哪些问题吧。

首先,调试方法弱。目前还是比较原始,通过log的方式来展示,且错误日志的详细程度很不如人意。
其次,控制力度弱。目前nginscript的处理力度还仅限于http request的处理和返回response的层面,还无法做到动态处理nginx请求之外的一些内容,比如动态用户数据或转发配置表动态更新等。
最后,整体实现弱。整体结构还是比较简单,js_run和js_set的运行环境是不太一致的,js_set执行ok的代码段在js_run上会出现一些异常。
综合来说,nginscript还是一个愿望和前景很美好的新生儿。需要一定时间打磨和优化。也希望大家多多的提供意见和反馈,甚至是提交自己的插件。从而使得它有更好的成长。

以上是nginx的nginScript实例分析的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:亿速云。如有侵权,请联系admin@php.cn删除
NGINX和Web托管:服务文件和管理流量NGINX和Web托管:服务文件和管理流量May 03, 2025 am 12:14 AM

NGINX可用于服务文件和管理流量。1)配置NGINX服务静态文件:定义监听端口和文件目录。2)实现负载均衡和流量管理:使用upstream模块和缓存策略优化性能。

NGINX与Apache:比较Web服务器技术NGINX与Apache:比较Web服务器技术May 02, 2025 am 12:08 AM

NGINX适合处理高并发和静态内容,Apache适用于动态内容和复杂URL重写。1.NGINX采用事件驱动模型,适合高并发。2.Apache使用进程或线程模型,适用于动态内容。3.NGINX配置简单,Apache配置复杂但更灵活。

nginx和apache:部署和配置nginx和apache:部署和配置May 01, 2025 am 12:08 AM

NGINX和Apache各有优势,选择取决于具体需求。1.NGINX适合高并发,部署简单,配置示例包括虚拟主机和反向代理。2.Apache适用于复杂配置,部署同样简单,配置示例包括虚拟主机和URL重写。

NGINX单元的目的:运行Web应用程序NGINX单元的目的:运行Web应用程序Apr 30, 2025 am 12:06 AM

NGINXUnit的目的是简化Web应用程序的部署和管理。其优势包括:1)支持多种编程语言,如Python、PHP、Go、Java和Node.js;2)提供动态配置和自动重载功能;3)通过统一的API管理应用生命周期;4)采用异步I/O模型,支持高并发和负载均衡。

NGINX:高性能Web服务器的简介NGINX:高性能Web服务器的简介Apr 29, 2025 am 12:02 AM

NGINX始于2002年,由IgorSysoev开发,旨在解决C10k问题。1.NGINX是高性能Web服务器,基于事件驱动的异步架构,适用于高并发。2.提供反向代理、负载均衡和缓存等高级功能,提升系统性能和可靠性。3.优化技巧包括调整worker进程数、启用Gzip压缩、使用HTTP/2和安全配置。

Nginx vs. Apache:看他们的架构Nginx vs. Apache:看他们的架构Apr 28, 2025 am 12:13 AM

NGINX和Apache在架构上的主要区别在于:NGINX采用事件驱动、异步非阻塞模型,而Apache使用进程或线程模型。1)NGINX通过事件循环和I/O多路复用机制高效处理高并发连接,适合静态内容和反向代理。2)Apache采用多进程或多线程模型,稳定性高但资源消耗大,适合需要丰富模块扩展的场景。

NGINX与Apache:检查优点和缺点NGINX与Apache:检查优点和缺点Apr 27, 2025 am 12:05 AM

NGINX适合处理高并发和静态内容,Apache则适用于复杂配置和动态内容。1.NGINX高效处理并发连接,适合高流量场景,但处理动态内容需额外配置。2.Apache提供丰富模块和灵活配置,适合复杂需求,但高并发性能较差。

nginx和apache:了解关键差异nginx和apache:了解关键差异Apr 26, 2025 am 12:01 AM

NGINX和Apache各有优劣,选择应基于具体需求。1.NGINX适合高并发场景,因其异步非阻塞架构。2.Apache适用于需要复杂配置的低并发场景,因其模块化设计。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。