環境: 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 変数と同様)。
次の例を参照してください。
場所/テスト {
rewrite_by_lua_block {
ngx.ctx.foo = 76
}
access_by_lua_block {
ngx.ctx.foo = ngx.ctx.foo 3
}
content_by_lua_block {
ngx.say(ngx.ctx.foo)
}
}
GET /test 出力へのアクセス
79
つまり、ngx.ctx.foo エントリは、リクエストの書き換え、アクセス、コンテンツ処理の各段階にわたって一貫しています。
サブリクエストを含む各リクエストには、独自の ngx.ctx テーブルがあります。例えば:###### 場所/サブ {
content_by_lua_block {
ngx.say("sub pre: ", ngx.ctx.blah)
ngx.ctx.blah = 32
ngx.say("サブ投稿: ", ngx.ctx.blah)
}
}
場所/メイン {
content_by_lua_block {
ngx.ctx.blah = 73
ngx.say("main pre: ", ngx.ctx.blah)
ローカル解像度 = ngx.location.capture("/sub")
ngx.print(res.body)
ngx.say("メイン投稿: ", ngx.ctx.blah)
}
}
GET /main 出力へのアクセス
メインプリ: 73
サブプレ: nil
サブポスト: 32
メインポスト: 73
ここで、子リクエストの ngx.ctx.blah エントリを変更しても、親リクエストの同じ名前のエントリには影響しません。これは、それぞれが異なるバージョンの ngx.ctx.blah を保持しているためです。
内部リダイレクトにより、元のリクエスト内の ngx.ctx データ (存在する場合) が破壊され、新しいリクエストには空の ngx.ctx テーブルが含まれます。例えば、###### 場所/新しい {
content_by_lua_block {
ngx.say(ngx.ctx.foo)
}
}
場所 /orig {
content_by_lua_block {
ngx.ctx.foo = "こんにちは"
ngx.exec("/new")
}
}
GET /orig にアクセスすると
が出力されます nil
元の「hello」値の代わりに。
Lua クロージャやネストされたテーブルを含む任意のデータ値をこの「マジック」テーブルに挿入でき、これによりカスタム メタメソッドを登録することもできます。
ngx.ctx を新しい Lua テーブル (例:
) で上書きすることもできます。 ngx.ctx = { foo = 32、bar = 54 }
init_worker_by_lua* 環境で使用される場合、このテーブルは現在の Lua ハンドルの有効期間と同じになります。
ngx.ctx テーブル クエリには比較的高価なメタメソッド呼び出しが必要ですが、これはユーザー独自の関数パラメーターを介してリクエストベースのデータを直接渡すよりもはるかに時間がかかります。したがって、パフォーマンスに重大な影響を与える可能性があるため、ユーザー関数パラメーターを保存するためだけにこの API を悪用しないでください。
また、メタメソッド「マジック」のため、ワーカーレベルのデータ共有など、lua モジュールレベルで「ローカル」レベルの ngx.ctx を使用しないでください。次の例は不適切です:
-- mymodule.lua
ローカル _M = {}
-- 次の行の ngx.ctx は 1 つのリクエストに属しますが、ctx 変数は Lua モジュール レベルです。
-- そして単一の労働者に属します。
ローカル ctx = ngx.ctx
関数 _M.main()
ctx.foo = "バー"
終わり###### _M
を返す 代わりに次のものを使用する必要があります:
-- mymodule.lua
ローカル _M = {}
関数_M.main(ctx)
ctx.foo = "バー"
終わり###### _M
を返す つまり、呼び出し元による ctx テーブルの呼び出しは、関数パラメーターを渡すことによって完了する必要があります。
以上がnginx が ctx を使用してデータ共有を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Nginxunitの目的は、Webアプリケーションの展開と管理を簡素化することです。その利点には、次のものが含まれます。1)Python、PHP、Go、Java、node.jsなどの複数のプログラミング言語をサポートします。 2)動的構成と自動リロード関数を提供します。 3)統一されたAPIを介してアプリケーションライフサイクルを管理します。 4)非同期I/Oモデルを採用して、高い並行性と負荷分散をサポートします。

Nginxは2002年に開始され、C10Kの問題を解決するためにIgorsysoevによって開発されました。 1.Nginxは、高性能の非同期アーキテクチャであり、高い並行性に適した高性能Webサーバーです。 2。システムのパフォーマンスと信頼性を向上させるために、リバースプロキシ、ロードバランス、キャッシュなどの高度な機能を提供します。 3。最適化手法には、HTTP/2とセキュリティ構成を使用した、ワーカープロセスの数の調整、GZIP圧縮の有効化が含まれます。

NginxとApacheの主なアーキテクチャの違いは、Nginxがイベント駆動型の非同期非ブロッキングモデルを採用し、Apacheはプロセスまたはスレッドモデルを使用することです。 1)nginxは、静的な内容と逆プロキシに適したイベントループとI/O多重化メカニズムを介して、高電流接続を効率的に処理します。 2)Apacheは、非常に安定しているがリソース消費量が高いマルチプロセスまたはマルチスレッドモデルを採用しており、リッチモジュールの拡張が必要なシナリオに適しています。

Nginxは、高い同時コンテンツと静的コンテンツの処理に適していますが、Apacheは複雑な構成と動的コンテンツに適しています。 1。NGINXは、交通量の多いシナリオに適した同時接続を効率的に処理しますが、動的コンテンツを処理するときは追加の構成が必要です。 2。Apacheは、複雑なニーズに適したリッチモジュールと柔軟な構成を提供しますが、並行性のパフォーマンスが低いです。

NginxとApacheにはそれぞれ独自の利点と欠点があり、選択は特定のニーズに基づいている必要があります。 1.Nginxは、非同期の非ブロッキングアーキテクチャのため、高い並行性シナリオに適しています。 2。Apacheは、モジュラー設計のため、複雑な構成を必要とする低変動シナリオに適しています。

Nginxunitは、複数のプログラミング言語をサポートし、動的構成、ゼロダウンタイム更新、組み込みのロードバランシングなどの機能を提供するオープンソースアプリケーションサーバーです。 1。動的構成:再起動せずに構成を変更できます。 2。多言語サポート:Python、Go、Java、PHPなどと互換性があります。 4。ビルトインロードバランシング:リクエストは、複数のアプリケーションインスタンスに配布できます。

nginxunitは、多言語プロジェクトや動的な構成要件に適した、apachetomcat、gunicorn、node.jsビルトインHTTPサーバーよりも優れています。 1)複数のプログラミング言語をサポートします。2)動的な構成リロード、3)高いスケーラビリティと信頼性を必要とするプロジェクトに適した組み込みの負荷分散機能を提供します。

Nginxunitは、モジュラーアーキテクチャと動的な再構成機能により、アプリケーションのパフォーマンスと管理性を向上させます。 1)モジュラー設計には、マスタープロセス、ルーター、アプリケーションプロセスが含まれ、効率的な管理と拡張をサポートします。 2)動的再構成により、CI/CD環境に適した、実行時に構成をシームレスに更新できます。 3)多言語サポートは、言語ランタイムの動的なロードを通じて実装され、開発の柔軟性が向上します。 4)イベント駆動型モデルと非同期I/Oによって高性能が達成され、高い並行性の下でも効率的なままです。 5)申請プロセスを分離し、アプリケーション間の相互の影響を減らすことにより、セキュリティが改善されます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









