ngx_stream_js_module

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

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

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

示例配置

  1. load_module modules/ngx_stream_js_module.so;
  2. ...
  3. stream {
  4. js_include stream.js;
  5. js_set $bar bar;
  6. js_set $req_line req_line;
  7. server {
  8. listen 12345;
  9. js_preread preread;
  10. return $req_line;
  11. }
  12. server {
  13. listen 12346;
  14. js_access access;
  15. proxy_pass 127.0.0.1:8000;
  16. js_filter header_inject;
  17. }
  18. }
  19. http {
  20. server {
  21. listen 8000;
  22. location / {
  23. return 200 $http_foo\n;
  24. }
  25. }
  26. }

stream.js 内容:

  1. var line = '';
  2. function bar(s) {
  3. var v = s.variables;
  4. s.log("hello from bar() handler!");
  5. return "bar-var" + v.remote_port + "; pid=" + v.pid;
  6. }
  7. function preread(s) {
  8. s.on('upload', function (data, flags) {
  9. var n = data.indexOf('\n');
  10. if (n != -1) {
  11. line = data.substr(0, n);
  12. s.done();
  13. }
  14. });
  15. }
  16. function req_line(s) {
  17. return line;
  18. }
  19. // Read HTTP request line.
  20. // Collect bytes in 'req' until
  21. // request line is read.
  22. // Injects HTTP header into a client's request
  23. var my_header = 'Foo: foo';
  24. function header_inject(s) {
  25. var req = '';
  26. s.on('upload', function(data, flags) {
  27. req += data;
  28. var n = req.search('\n');
  29. if (n != -1) {
  30. var rest = req.substr(n + 1);
  31. req = req.substr(0, n + 1);
  32. s.send(req + my_header + '\r\n' + rest, flags);
  33. s.off('upload');
  34. }
  35. });
  36. }
  37. function access(s) {
  38. if (s.remoteAddress.match('^192.*')) {
  39. s.abort();
  40. return;
  41. }
  42. s.allow();
  43. }

指令

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 处理程序都会接收一个参数,一个流会话对象

原文档

http://nginx.org/en/docs/stream/ngx_stream_js_module.html