ホームページ  >  記事  >  運用・保守  >  nginx JavaScript 機能 nginScript サンプル分析

nginx JavaScript 機能 nginScript サンプル分析

WBOY
WBOY転載
2023-05-13 22:04:101154ブラウズ

nginx は主に次のことができます:

1. TCP の 7 番目の層で動作し、http プロトコルのすべてのコンテンツを分析して処理できます。
2. lua、perl、JavaScript 動的言語をサポート
3. サードパーティのプラグインをサポート

nginscript について話しましょう

1. nginscript JavaScript/ecmascript のサブセットです。これは JavaScript 言語のほとんどの機能を実装していますが、ECMAScript 標準に完全には準拠しておらず、JavaScript のより難しい部分は放棄されています。

2. nginscript は v8 エンジンを通じて実装されません。代わりに、より小型でエネルギー消費が低く、nginx アプリケーション シナリオにより適した小型仮想マシン (vm) を通じて実装されます。 nginx が独自の字句解析セットを実装していることがわかります。

3. nginscript は nginx 設定ファイル内で実行されます。例: nginx.conf ファイル内。したがって、nginscript は、従来の構成ファイルで処理できるすべてを完了でき、同時に構成管理を動的にすることができます。これは、nginscript が登場した最も重要な理由でもあります。

4. nginscript は nginx プラグインとして存在します。プラグイン名は njs です。他の nginx プラグインと同様に、インストールを完了するには nginx を再コンパイルする必要があります。

5. nginscript は現在開発初期段階にあります。 nginx チームとコミュニケーションをとり、電子メールを通じて要求を提出することができます。

nginscript のインストール方法

こちらの公式手順に従ってください:

// 1. 最新の nginx パッケージをダウンロードしますwget //2. Unzip tar -xzvf nginx-1.9.4.tar.gz //3. mercurial を介して nginscript モジュールを取得します。ここで mercurial がインストールされていない場合は、yum install mercurial を実行する必要があります。 hg clone

//4. nginx をコンパイルします。ここでは njs モジュールのみを指定します。他の必要なモジュールも一緒にインストールすることを忘れないでください。 nginx をコンパイルしていない場合、一部の依存モジュールには yum のインストールが必要です。ご自身で検索してください。 cd nginx-1.9.4 ./configure --add-module=../njs/nginx --prefix=/usr/local make make install ok. これでインストールが完了し、プレイを開始できます。

nginscript の具体的な使用方法

nginscript を使用すると、主に 2 つの命令が nginx 設定システムに追加されます。具体的な手順は次のとおりです:

js_set、構成内の変数値を設定します

js_run、構成ルールを直接実行します

1. まず nginx の js_set を見てください。 .conf それはどのように機能しますか?

http {
 js_set $msg"
   var str = 'hello,imweb';
   // javascript str;
 ";
 server {
  ...
  location /{
   return 200 $msg;
  }
 }
}

結果:

nginx JavaScript 機能 nginScript サンプル分析

上記の例では、js を通じて nginx に変数値を設定できることがわかります。意のままに。これらの変数は、nginx 設定のさまざまな場所で使用できます。例: proxy_pass、limit_req_zone、sub_filter。以前の構成と比較して、柔軟性が大幅に向上しました。

2. js_runの実行ルールとシナリオ

js_runはlocation命令で実行され、指定されたパスと一致する場合、対応するJavaScriptが実行されます。 location
js_run はい http によって返されるコンテンツを JavaScript を通じて直接生成します
ここに具体的な例を示します:

location /imwebteam {
 js_run "
  var res;
  res = $r.response;
  res.status = 200;
  res.send('hello,imweb!');
  res.finish();
 ";
}

この結果は最初の結果と同じです。ここでは詳細には触れません。

3. 2 つの命令の処理に加えて、重要な変数 $r

js_set と js_run を通じて、http リクエストを完全に制御できます。制御方法は、変数 $r を使用することです。 $r の内容は、次の簡単な例で確認できます。

http {
 js_set $summary "
 var a, s, h;
 s = 'js summary\n\n';
 s += 'method: ' + $r.method + '\n';
 s += 'http version: ' + $r.httpversion + '\n';
 s += 'host: ' + $r.headers.host + '\n';
 s += 'remote address: ' + $r.remoteaddress + '\n';
 s += 'uri: ' + $r.uri + '\n';
 s += 'headers:\n';
 for (h in $r.headers) {
  s += ' header \"' + h + '\" is \"' + $r.headers[h] + '\"\n';
 }
 s += 'args:\n';
 for (a in $r.args) {
  s += ' arg \"' + a + '\" is \"' + $r.args[a] + '\"\n';
 }
 s;
 ";
 server {
 listen 8000;
 location /imwebteam{
  return 200 $summary;
 }
}

結果は図に示すとおりです。

nginx JavaScript 機能 nginScript サンプル分析

nginscript の現在の問題

上記の導入後, 誰もが既に nginscript の基本を理解していると思います。それでは、この新生児がどのような問題を抱えているかを見てみましょう。

まず、デバッグ方法が弱いです。現時点では、まだ比較的原始的なものであり、ログを通じて表示され、エラー ログの詳細は非常に満足のいくものではありません。
第二に、コントロールが弱いです。現時点では、nginscript の処理能力は http リクエストの処理と返されるレスポンスに限定されており、動的ユーザー データや転送設定テーブルの動的更新など、nginx リクエスト以外の一部のコンテンツを動的に処理することはまだできません。
最後に、全体的な実装が弱いです。全体の構造は比較的単純ですが、js_run と js_set の実行環境が一致していないため、js_set が正常に実行されるコード部分では js_run で例外が発生します。
要約すると、nginscript はまだ誕生したばかりで、大きな希望と展望を持っています。磨き上げて最適化するには時間がかかります。また、皆さんがより多くの意見やフィードバックを提供していただき、さらには独自のプラグインを提出していただければ幸いです。これにより、より良く成長することができます。

実際のシナリオの場合

これらは、以前に Li Xiaotentengjun および Donald と議論した 2 つの主要なシナリオ、reallog システムと nohost2.0 システムです。 nginscript は、両方のシナリオにとって間違いなく素晴らしいニュースであり、ルール応答の観点からは、既存のシステムで非常に柔軟な処理方法を実現できます。ただし、ユーザー設定の動的な読み込みに関しては、別の方法で実装する必要があります。この部分については、まず nginx 開発チームに問題を提起し、具体的な状況を確認してから、さらに議論して同期する予定です。みんなとともに。

以上がnginx JavaScript 機能 nginScript サンプル分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。