ngx_stream_js_module モジュール
設定例 ディレクティブ js_access js_filter js_include js_preread js_set Session Object Properties |
ngx_stream_js_module
モジュールはnginScript - JavaScript言語のサブセット、でのハンドラを実装するために使われます。
このモジュールはデフォルトではビルドされず、--add_module
configuration パラメータを使ってnginScriptと一緒にコンパイルする必要があります:
./configure --add-module=path-to-njs
/nginx
nginScriptモジュールと一緒にrepositoryは以下のコマンド(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 |
---|---|
デフォルト: | - |
コンテキスト: |
stream , server |
access フェーズで呼ばれるnginScript関数を設定します。
構文: |
js_filter |
---|---|
デフォルト: | - |
コンテキスト: |
stream , server |
データフィルタを設定します。
構文: |
js_include |
---|---|
デフォルト: | - |
コンテキスト: |
stream |
nginScript内のサーバと変数のハンドラを実装するファイルを指定します。
構文: |
js_preread |
---|---|
デフォルト: | - |
コンテキスト: |
stream , server |
preread フェーズで呼ばれるnginScript関数を設定します。
構文: |
js_set
|
---|---|
デフォルト: | - |
コンテキスト: |
stream |
特定の変数のためにnginScript関数を設定します。
セッション オブジェクト プロパティ
各ストリーム nginScript ハンドラは1つの引数、ストリーム セッション オブジェクトを受け取ります。
セッションオブジェクトは以下のプロパティを持ちます:
remoteAddress
- クライアントアドレス、読み込みのみ
eof
- 読み込みのみのbooleanプロパティ。もし現在のバッファが最後のバッファであればtrue
fromUpstream
- 読み込みのみのbooleanプロパティ。もし現在のバッファがupstreamサーバからクライアントへのものであればtrue
buffer
- 現在のバッファ。書き込み可
variables{}
- nginx 変数オブジェクト、読み込みのみ
OK
-
OK
リターンコード DECLINED
-
DECLINED
リターンコード AGAIN
-
AGAIN
リターンコード ERROR
-
ERROR
リターンコード ABORT
-
ABORT
リターンコード
セッションオブジェクトは以下のメソッドを持ちます:
log(
string
)-
送信された
string
をエラーログに書き込みます