ngx_stream_js_module モジュール
ngx_stream_js_module
モジュールはnjs - JavaScript言語のサブセット、でのハンドラを実装するために使われます。
ダウンロードとインストールの説明はここで利用可能です。
設定例
この例は、0.4.0以降で動作します。
stream { js_import stream.js; js_set $bar stream.bar; js_set $req_line stream.req_line; server { listen 12345; js_preread stream.preread; return $req_line; } server { listen 12346; js_access stream.access; proxy_pass 127.0.0.1:8000; js_filter stream.header_inject; } } http { server { listen 8000; location / { return 200 $http_foo\n; } } }
The stream.js
file:
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.deny(); return; } s.allow(); } export default {bar, preread, req_line, header_inject, access};
ディレクティブ
構文: |
js_access |
---|---|
デフォルト: | - |
コンテキスト: |
stream , server |
access フェーズで呼ばれるnjs関数を設定します。0.4.0以降、モジュール関数を参照できます。
構文: |
js_fetch_buffer_size |
---|---|
デフォルト: |
js_fetch_buffer_size 16k; |
コンテキスト: |
stream , server |
このディレクティブはバージョン0.7.4から導入されました。
Fetch APIを使って読み書きするためのバッファのsize
を設定します。
構文: |
js_fetch_ciphers |
---|---|
デフォルト: |
js_fetch_ciphers HIGH:!aNULL:!MD5; |
コンテキスト: |
stream , server |
このディレクティブはバージョン0.7.0から導入されました。
Fetch APIを使ったHTTPS接続のために有効にされたcipherを指定します。cipherはOpenSSLライブラリで理解される形式で指定されます。
全てのリストは"openssl ciphers
"コマンドを使ってみることができます。
構文: |
js_fetch_max_response_buffer_size |
---|---|
デフォルト: |
js_fetch_max_response_buffer_size 1m; |
コンテキスト: |
stream , server |
このディレクティブはバージョン0.7.4から導入されました。
Fetch APIを使って受信された応答の最大size
を設定します。
構文: |
js_fetch_protocols
[ |
---|---|
デフォルト: |
js_fetch_protocols TLSv1 TLSv1.1 TLSv1.2; |
コンテキスト: |
stream , server |
このディレクティブはバージョン0.7.0から導入されました。
Fetch APIを使ったHTTPS接続のために指定されたプロトコルを有効にします。
構文: |
js_fetch_timeout |
---|---|
デフォルト: |
js_fetch_timeout 60s; |
コンテキスト: |
stream , server |
このディレクティブはバージョン0.7.4から導入されました。
Fetch APIのための読み書きのためのタイムアウトを定義します。タイムアウトは二つの連続する読み込み/書き込み操作の間に設定され、応答全体の転送のためのものではありません。この時間の間に何もデータが転送されない場合、接続は閉じられます。
構文: |
js_fetch_trusted_certificate |
---|---|
デフォルト: | - |
コンテキスト: |
stream , server |
このディレクティブはバージョン0.7.0から導入されました。
Fetch APIのHTTPS証明書をverifyするために使われるPEM形式の信頼されたCA証明書のfile
を指定します。
構文: |
js_fetch_verify |
---|---|
デフォルト: |
js_fetch_verify on; |
コンテキスト: |
stream , server |
このディレクティブはバージョン0.7.4から導入されました。
Fetch APIの証明書の検証を有効または無効にします。
構文: |
js_fetch_verify_depth |
---|---|
デフォルト: |
js_fetch_verify_depth 100; |
コンテキスト: |
stream , server |
このディレクティブはバージョン0.7.0から導入されました。
Fetch APIの連鎖証明書の検証の深さを設定します。
構文: |
js_filter |
---|---|
デフォルト: | - |
コンテキスト: |
stream , server |
データフィルタを設定します。0.4.0以降、モジュール関数を参照できます。
構文: |
js_import |
---|---|
デフォルト: | - |
コンテキスト: |
stream |
このディレクティブはアb―ジョン0.4.0で導入されました。
njs内のlocationと変数を実装するモジュールをインポートします。export_name
は、モジュール関数にアクセスするための名前空間として使います。export_name
が指定されない場合、モジュール名が名前空間として使われます。
js_import stream.js;
ここで、モジュール名stream
はエクスポートにアクセスする時に名前空間として使われます。インポートされたモジュールがfoo()
をエクスポートする場合、stream.foo
はそれを参照するために使われます。
いくつかのjs_import
ディレクティブを指定できます。
構文: |
js_include |
---|---|
デフォルト: | - |
コンテキスト: |
stream |
njs内のサーバと変数のハンドラを実装するファイルを指定します:
nginx.conf: js_include stream.js; js_set $js_addr address; server { listen 127.0.0.1:12345; return $js_addr; } stream.js: function address(s) { return s.remoteAddress; }
このディレクティブはバージョン0.4.0 で非推奨になり、0.7.1で削除されました。代わりにjs_import ディレクティブが使われるべきです。
構文: |
js_path
|
---|---|
デフォルト: | - |
コンテキスト: |
stream |
このディレクティブはバージョン0.3.0から導入されました。
njsモジュールの追加のパスをせっていします。
構文: |
js_preread |
---|---|
デフォルト: | - |
コンテキスト: |
stream , server |
preread フェーズで呼ばれるnjs関数を設定します。0.4.0以降、モジュール関数を参照できます。
構文: |
js_set
|
---|---|
デフォルト: | - |
コンテキスト: |
stream |
特定の変数
のためにnjsfunction
を設定します。0.4.0以降、モジュール関数を参照できます。
この関数は、特定のリクエストで変数が初めて参照された時に呼び出されます。正確な瞬間は、変数が参照されるphase によって異なります。これは、変数の評価に関係のないロジックを実行するために使えます。例えば、変数がlog_formatディレクティブでのみ参照されている場合、そのハンドラはログフェーズまで実行されません。このハンドラはリクエストが解放される直前になんらかのクリーンアップを行うために使えます。
js_set
ハンドラはすぐに結果を返すため、同期コールバックのみをサポートします。従って、ngx.fetch()やsetTimeout()のような非同期コールバックはサポートされません。
構文: |
js_var |
---|---|
デフォルト: | - |
コンテキスト: |
stream |
このディレクティブはバージョン0.5.3から導入されました。
writable変数を宣言します。値には、テキスト、変数、およびそれらの組み合わせを含めることができます。
セッション オブジェクト プロパティ
各ストリーム njs ハンドラは1つの引数、ストリーム セッションオブジェクトを受け取ります。