序文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】<i></i>タグと<em></em>タグ同じ...
目次1. Springbootプロジェクトを準備する2. 関連する設定を実行する3.パッケージ4.D...
目次1. 依存関係をインストールする2. vue.config.js ファイルで pwa を設定しま...
問題の説明最近、仕事中に問題が発生しました。MySQL が起動に失敗しました。エラー ログは次のとお...
目次序文:実装手順:完全なソースコード:詳細情報:序文: vueでは、デフォルトページを実装し、di...
Tencent QQのホームページがリニューアルされ、Webフロントエンド開発がますます注目を集めて...
1. MySQLがインストールされているかどうかを確認する yum インストール済みリスト | gr...
Python8のインストールを最小化した後、Python3.8.1をインストールしました。オンライン...
#mysql -uroot -pパスワードを入力してくださいmysql> show full...
init_connectの役割init_connect は通常、接続が来たときに、自動コミットを 0...
この記事では、MySQL 5.7.17のインストールと設定方法を参考までに紹介します。具体的な内容は...
目次1. スローログの紹介2. スローログの練習1. スローログの紹介スロー ログの正式名称はスロー...
旧ライフサイクルと比較して 3つのフックが廃止され、2つの新しいフックが追加されましたReact16...
目次序文入力ボックスコンポーネントレイアウトvモデルデータ検証ルール設計形状サブコンポーネントは検証...
序文: Linux ホストは、エージェント プログラムをインストールする場合でも、SNMP を使用す...