序文Nginx は、よく使用される負荷分散ゲートウェイです。大量のログを生成します。ただし、Nginx 構成ファイルは宣言型プログラミング パラダイムであるため、プロセス制御を記述するのは便利ではなく、簡単な指示ではログ レポートを実現できません。 通常、Nginx ログ レポートでは、Nginx ログ ファイルを定期的に解析してレポートするためのシェル スクリプトまたは別の言語のスクリプトを作成する必要があります。 NJS モジュールを使用すると、リアルタイムのログ レポートを実現できます。 ただし、NJS モジュールでサポートされている命令の制限により、単一の命令ではログ レポートを適切に実装することはできません。複数の命令を組み合わせることで、ノンブロッキングのリアルタイム ログ レポートを実現できます。 このソリューションは Nginx で実装されており、Node、Python などの他のプロセスに依存しません。 実装のアイデアNginx には多くの指示があります。以下は最近検討された実装方法です。よりエレガントな実装方法がある場合は、コミュニケーションのためにメッセージを残してください。 JS スクリプトを作成するための強力な Njs モジュールがありますが、NJS モジュールの命令には多くの制限があり、Node のような機能を実現することはできません。 ログのリアルタイム レポートを実現するには、次の 2 つの機能を満たす必要があります。
よく使用される js_set 命令はすべてのリクエストでトリガーできますが、同期操作のみをサポートします。フェッチ メソッドとサブリクエスト メソッドは使用できません。 fetch 関数は js_content ディレクティブで使用できます。ただし、location でのみ使用できます。したがって、他のディレクティブを使用してリクエストを js_content パスに転送し、ログ レポートをディレクティブ内で完了することができます。 http_auth_request_module モジュールの auth_request 命令は、jwt 検証などのリクエストの権限検証を実行するために使用されます。この命令はリクエストごとにトリガーされ、サブリクエストを作成し、リクエストの戻り結果に基づいて権限検証の結果を決定します。 したがって、これら 2 つのモジュールを組み合わせてログ レポートを実現できます。 実装手順1. Nginxをコンパイルするこの機能を実装するには、Nginx が ngx_http_js_module モジュールと ngx_http_auth_request_module モジュールをサポートしている必要があります。これら 2 つのモジュールはデフォルトではインストールされません。自分でコンパイルして実装する必要があります。
コンパイル ./configure --add-module=[NJS モジュール パス]/NJS/nginx --with-http_auth_request_module 作成 && インストール 2. 設定ファイルは以下のとおりですhttp { js_import http.js; # js ファイルをインポート server { 聞く 80; auth_request /proxy_report; # この命令は各リクエストの開始時にトリガーされ、proxy_report パスの場所に転送されるサブリクエストを作成します / { インデックス index.html index.htm; } 場所 /proxy_report { internal; #内部リクエストのみを制限します #元のリクエストの uri とメソッド データをヘッダーに保存します。auth_request リクエストによってこれらのデータが変更されるためです。 proxy_set_header X-オリジナルURI $request_uri; proxy_set_header X-Original-METHOD $request_method; # 別のサーバーに転送 proxy_pass http://localhost:8080/report; } } サーバー{ 8080を聴く; # レポートインターフェースは別のサーバーに配置されており、ループによるリクエストのトリガーを回避するためにサーバーに auth_request 命令はありません。location /report { #レポート操作を完了するために、js_content 命令を通じて js 処理スクリプトを導入します js_content http.report; } } } // http.js ファイルimport qs from "querystring"; 非同期関数レポート(r){ 引数を{ // ヘッダー uri から元の uri とメソッドを取得します: r.headersIn['X-Original-URI'], メソッド: r.headersIn['X-Original-METHOD'], リモートアドレス: r.remoteAddress、 ステータス: r.status、 ヘッダー入力: JSON.stringifry(r.headersIn)、 } // 現在のリクエストプロセスをブロックせずに非同期リクエストを発行し、バックグラウンドでレポートを完了します ngx.fetch(`http://[レポートサービスパス]?${qs.stringify(args)}`, { メソッド: 'GET'、 }) // コマンドが成功したことを確認するためにステータスコード200を返します r.return(200) } エクスポートデフォルト{レポート} 要約するNginx の純粋な構成でリアルタイム ログ レポートを実装するアイデアと方法についてはこれで終わりです。Nginx ログのリアルタイム レポートに関する関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL データベースのパフォーマンス最適化の概要
>>: CSS3 で作成された背景グラデーションアニメーション効果
ケース1 vue-cliはvue3プロジェクトをビルドし、プロジェクトをLinuxサーバーにアップロ...
MySQL で、id、a、b の 3 つのフィールドを持つ新しいテーブルを作成します。次のように、同...
MySQLはレプリケーションフィルターを動的に変更します今日遭遇した問題についてお話しします。今日は...
コードをコピーコードは次のとおりです。 @文字セット "utf-8"; /* @...
別のツリー構造があるJavascriptオブジェクトでは、このツリーが本物であると伝えるだけでよいD...
docker create コマンドは、イメージに基づいてコンテナを作成できます。このコマンドの効果...
実験環境:物理マシン Windows 10 x64物理NIC情報IPv4 アドレス: 192.168...
0. 概要Zabbix は非常に強力なオープンソースの監視ツールです。以下では、Zabbix がテー...
文章1) Ubuntuイメージをダウンロードする docker プル Ubuntu 2) 画像を見る...
序文前回の記事では、eコマース シナリオでのフラッシュ セールの例を通じて、モノリシック アーキテク...
この記事の例では、画像比較を実現するためのjQueryプラグインの具体的なコードを参考までに共有して...
デザイナーは心理学を理解する必要があるデザイナーが知るべき心理学という本は非常に興味深いです。まず、...
3つの知識ポイント: 1. CSS子孫セレクターhttps://www.w3school.com.c...
エラー メッセージ:ストアの更新、挿入、または削除ステートメントが予期しない行数 (0) に影響を与...
MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...