環境: init_worker_by_lua、set_by_lua、rewrite_by_lua、access_by_lua、content_by_lua、header_filter_by_lua、body_filter_by_lua、log_by_lua、ngx.timer.、balancer_by_lua この Lua テーブルは、リクエストベースの Lua 環境データを保存するために使用でき、その有効期間は現在のリクエストと同じです (Nginx 変数と同様)。 次の例を参照してください。 場所 /テスト { 書き換えブロック { ngx.ctx.foo = 76 } アクセス_by_lua_ブロック { ngx.ctx.foo = ngx.ctx.foo + 3 } コンテンツ_by_lua_block { ngx.say(ngx.ctx.foo) } } GET /test 出力にアクセスする
つまり、ngx.ctx.foo エントリは、リクエストの書き換え、アクセス、およびコンテンツ処理の各フェーズにわたって一貫性を保ちます。 サブリクエストを含む各リクエストには、ngx.ctx テーブルの独自のコピーがあります。例えば: 場所 /sub { コンテンツ_by_lua_block { ngx.say("サブプレ: ", ngx.ctx.blah) ngx.ctx.blah = 32 ngx.say("サブ投稿: ", ngx.ctx.blah) } } 場所 /main { コンテンツ_by_lua_block { ngx.ctx.blah = 73 ngx.say("メイン pre: ", ngx.ctx.blah) ローカル res = ngx.location.capture("/sub") ngx.print(res.body) ngx.say("メイン投稿: ", ngx.ctx.blah) } } GET /main出力にアクセスする
ここで、子リクエストの ngx.ctx.blah エントリを変更しても、親リクエストの同じ名前のエントリには影響しません。これは、それぞれが異なるバージョンの ngx.ctx.blah を保持しているためです。 内部リダイレクトにより、元のリクエスト内の ngx.ctx データ (存在する場合) が破棄され、新しいリクエストには空の ngx.ctx テーブルが含まれます。例えば、 場所 /new { コンテンツ_by_lua_block { ngx.say(ngx.ctx.foo) } } 場所 / 元 { コンテンツ_by_lua_block { ngx.ctx.foo = "こんにちは" ngx.exec("/new") } } GET /origにアクセスすると、出力されます
元の「hello」値の代わりに。 この「マジック」テーブルには、Lua クロージャやネストされたテーブルなどの任意のデータ値を挿入することができ、カスタム メタメソッドの登録も可能になります。 ngx.ctxを新しいLuaテーブルで上書きすることも可能です。たとえば、 init_worker_by_lua* コンテキストで使用される場合、このテーブルの有効期間は現在の Lua ハンドルと同じになります。 ngx.ctx テーブルの検索には比較的コストのかかるメタメソッド呼び出しが必要であり、これはユーザー独自の関数引数を介してリクエストベースのデータを直接渡すよりもはるかに遅くなります。したがって、パフォーマンスに大きな影響を与える可能性があるため、ユーザー関数パラメータを保存するためにこの API を乱用しないでください。 また、メタメソッドの「マジック」のため、ワーカー レベルのデータ共有など、Lua モジュール レベルで「ローカル」レベルの ngx.ctx を使用しないでください。次の例は良くありません。 -- mymodule.lua ローカル _M = {} -- 次の行の ngx.ctx は単一のリクエストに属しますが、ctx 変数は Lua モジュール レベルにあります。 -- そして、それは一人の労働者に属します。 ローカル ctx = ngx.ctx 関数_M.main() ctx.foo = "バー" 終わり _Mを返す 代わりに以下を使用する必要があります。 -- mymodule.lua ローカル _M = {} 関数_M.main(ctx) ctx.foo = "バー" 終わり _Mを返す つまり、呼び出し元は関数にパラメータを渡して ctx テーブルへの呼び出しを完了する必要があります。 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: Mysql 5.6ではユーザー名とパスワードを変更するメソッドが追加されました
この記事では、時間範囲効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します...
表では、右下の境界線の色を個別に定義したり、セルの左上の境界線の色を定義したりできます。これら 2 ...
CSS3 アニメーション トランジションを使用して、リンクの上にマウスを移動すると小さなポップアップ...
序文これまでは、/bin/ ディレクトリのソフトリンクを変更して Python のバージョンを切り替...
目次1. Maven 依存関係2. メニュー関連クラス1. メインメニュー2. サブメニュー3. S...
序文これまでは、パイプワークで割り当てた静的 IP は一時的なものであり、再起動すると無効になってい...
HTML構造 <本文> <div class="wrapper"...
目次1. コンセプト2. 環境の説明3. マスタースレーブホットスタンバイ実装1. コンセプト1. ...
目次1 Java環境の設定2 tomcatのインストールと展開Tomcat をインストールして展開す...
Microsoft は T4 テンプレートを提供していますが、使用するのが非常に難しいと思います。ス...
1. 遭遇したいくつかの問題2008 年にパフォーマンス テストを行っていたとき、パフォーマンス テ...
<br />前回の記事:優秀なデザイナーの7つの原則(1):フォントデザイン 英語 原文...
TeamCenter12はアカウントのパスワードを入力し、ログインをクリックすると、404または50...
序文:データベースを日常的に使用すると、パスワードが単純すぎて変更する必要がある場合、パスワードの有...
この記事では、SMS送信のカウントダウンを実装するためのJavaScriptの具体的なコードを参考ま...