返回介绍

介绍

其他

How-To

开发

模块参考

ngx_stream_js_module

发布于 2024-08-13 23:46:26 字数 6863 浏览 0 评论 0 收藏 0

ngx_stream_js_module 模块用于在 njs 中实现处理程序 —— 这是 JavaScript 语言的一个子集。

默认情况下不构建此模块。可在此处下载和安装说明。

此示例适用于 njs 0.2.4 及更高版本。对于 njs 0.2.3 及更早版本,请使用此示例

示例配置

load_module modules/ngx_stream_js_module.so;
...

stream {
  js_include stream.js;

  js_set $bar bar;
  js_set $req_line req_line;

  server {
    listen 12345;

    js_preread preread;
    return   $req_line;
  }

  server {
    listen 12346;

    js_access  access;
    proxy_pass 127.0.0.1:8000;
    js_filter  header_inject;
  }
}

http {
  server {
    listen 8000;
    location / {
      return 200 $http_foo\n;
    }
  }
}

stream.js 内容:

var line = '';

function bar(s) {
  var v = s.variables;
  s.log("hello from bar() handler!");
  return "bar-var" + v.remote_port + "; pid=" + v.pid;
}

function preread(s) {
  s.on('upload', function (data, flags) {
    var n = data.indexOf('\n');
    if (n != -1) {
      line = data.substr(0, n);
      s.done();
    }
  });
}

function req_line(s) {
  return line;
}

// Read HTTP request line.
// Collect bytes in 'req' until
// request line is read.
// Injects HTTP header into a client's request

var my_header =  'Foo: foo';
function header_inject(s) {
  var req = '';
  s.on('upload', function(data, flags) {
    req += data;
    var n = req.search('\n');
    if (n != -1) {
      var rest = req.substr(n + 1);
      req = req.substr(0, n + 1);
      s.send(req + my_header + '\r\n' + rest, flags);
      s.off('upload');
    }
  });
}

function access(s) {
  if (s.remoteAddress.match('^192.*')) {
    s.abort();
    return;
  }

  s.allow();
}

指令

js_access

-说明
语法js_access function;
默认——
上下文stream、server

设置一个将在 access 阶段调用的 njs 函数。

js_filter

-说明
语法js_filter function;
默认——
上下文stream、server

设置一个数据过滤器。

js_include

-说明
语法js_include file;
默认——
上下文stream

指定一个使用 njs 实现服务器和变量处理程序的文件。

js_preread

-说明
语法js_preread function;
默认——
上下文stream、server

设置一个将在 preread) 阶段调用的 njs 函数。

js_set

-说明
语法js_set function;
默认——
上下文stream

设置一个用于指定变量的 njs 函数。

会话对象属性

每一个流 njs 处理程序都会接收一个参数,一个流会话对象

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文