ngx_stream_js_module
Module ngx_stream_js_module
- 示例配置
- 指令
- js_access
- js_filter
- js_include
- js_preread
- js_set
- 会话对象属性
该ngx_stream_js_module
模块用于实现nginScript中的处理程序 - JavaScript语言的一个子集。
此模块不是默认生成的,它应该使用--add-module
配置参数与nginScript模块一起编译:
./configure --add-module=path-to-njs/nginx
具有nginScript模块的存储库可以使用以下命令克隆(需要Mercurial客户端):
hg clone http://hg.nginx.org/njs
该模块也可以构建为动态:
./configure --add-dynamic-module=path-to-njs/nginx
示例配置
stream {
js_include stream.js;
js_set $foo foo;
js_set $bar bar;
server {
listen 12345;
js_preread qux;
return $foo;
}
server {
listen 12346;
js_access xyz;
proxy_pass 127.0.0.1:8000;
js_filter baz;
}
}
http {
server {
listen 8000;
location / {
return 200 $http_foo\n;
}
}
}
The stream.js
file:
var req = '';
var matched = 0;
var line = '';
function qux(s) {
var n = s.buffer.indexOf('\n'
if (n == -1) {
return s.AGAIN;
}
line = s.buffer.substr(0, n
}
function foo(s) {
return line;
}
function bar(s) {
var v = s.variables;
s.log("hello from bar() handler!"
return "foo-var" + v.remote_port + "; pid=" + v.pid;
}
// The filter processes one buffer per call.
// The buffer is available in s.buffer both for
// reading and writing. Called for both directions.
function baz(s) {
if (s.fromUpstream || matched) {
return;
}
// Disable certain addresses.
if (s.remoteAddress.match('^192.*')) {
return s.ERROR;
}
// Read HTTP request line.
// Collect bytes in 'req' until request
// line is read. Clear current buffer to
// disable output.
req = req + s.buffer;
s.buffer = '';
var n = req.search('\n'
if (n != -1) {
// Inject a new HTTP header.
var rest = req.substr(n + 1
req = req.substr(0, n + 1
var addr = s.remoteAddress;
s.log('req:' + req
s.log('rest:' + rest
// Output the result and skip further
// processing.
s.buffer = req + 'Foo: addr_' + addr + '\r\n' + rest;
matched = 1;
}
}
function xyz(s) {
if (s.remoteAddress.match('^192.*')) {
return s.ABORT;
}
}
指令
句法: | js_access函数; |
---|---|
默认: | — |
语境: | 流,服务器 |
设置将在访问阶段调用的nginScript函数。
句法: | js_filter函数; |
---|---|
默认: | — |
语境: | 流,服务器 |
设置数据过滤器。
句法: | js_include文件; |
---|---|
默认: | — |
语境: | 流 |
指定一个在nginScript中实现服务器和变量处理程序的文件。
句法: | js_preread函数; |
---|---|
默认: | — |
语境: | 流,服务器 |
设置将在预读阶段调用的nginScript函数。
句法: | js_set $ variable函数; |
---|---|
默认: | — |
语境: | 流 |
为指定变量设置nginScript函数。
会话对象属性
每个流nginScript处理程序都会收到一个参数,一个流会话对象。
会话对象具有以下属性:
remoteAddress
客户端地址,只读eof
布尔型只读属性,如果当前缓冲区是最后一个缓冲区fromUpstream
,则为true布尔型只读属性,如果当前缓冲区来自上游服务器到客户端buffer
,则为true 当前缓冲区,可写variables{}
nginx变量对象,只读OK
的OK
返回码DECLINED
的DECLINED
返回码AGAIN
的AGAIN
返回码ERROR
的ERROR
返回码ABORT
的ABORT
返回码
会话对象具有以下方法:
log(string)
写一个发送string
到错误日志