静的リソースファイルのアクセスログをフィルタリングするNginxの実装

静的リソースファイルのアクセスログをフィルタリングするNginxの実装

乱雑なログ

日常的に使用される Nginx は、静的リソース サーバーとリバース プロキシ サーバーの両方として使用されることが多いです。特に、クロスドメインの問題を考慮すると、静的リソースとバックエンド インターフェイスに同じリスニング ポートが使用されます。フィルタリングが実行されない場合、js、css、jpg などの静的リソースに対する大量のリクエストが access_log に表示され、バックエンド インターフェイスの呼び出しログの表示に影響します。

最初はあまり気にしていなかったのですが、Nginx の最適化に関する記事を閲覧していたときに、map を使用してログを書き込むかどうかのパラメーターを定義する方法を見つけました。最近の動的クロスドメイン構成での map の使用と組み合わせることで、map の別の使用シナリオを簡単に学習して記録しました。

マップを使用して静的リソースファイルへのアクセスのログをフィルタリングする

http {
  log_format main '$remote_addr [$time_local] $request $status '
           'uct="$upstream_connect_time" rt="$request_time"';

  マップ $uri $not_static {
    デフォルト 1;
    ~^(.*\.(gif|jpg|jpeg|png|bmp|swf|js|css|woff|ttf)$) 0;
  }

  サーバー{
    聞く 23456;
    server_name ローカルホスト;
    access_log ログ/test.log メイン if=$not_static;
  }
}

説明:

  • メインとしてマークされたlog_formatをカスタマイズする
  • リクエスト内のURIと一致します。リソースがgif、jpg、css、jsなどで終わる場合、$not_staticは0、それ以外の場合は1になります。
  • ポート 23456 へのアクセス要求の場合、access_log は main として識別されるカスタム ログ形式の使用を指定し、$not_static が 1 の場合にのみログが記録されます。if パラメータの詳細については、公式ドキュメントを参照してください。
  • 注意すべき点は、access_log で if パラメータを使用する場合は、log_format を明示的に指定する必要があることです。そうしないと、エラーが報告されます: nginx: [emerg] unknown log format "if=$not_static"

動的ログと静的ログを分離して書き込む別の方法

場所 ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|woff|ttf)$ {
  #access_log off; #静的リソースへのアクセスのログを出力しない access_log logs/static_resources.log;
}

静的リソース ファイルの Nginx アクセス ログ フィルタリングの実装に関するこの記事はこれで終わりです。より関連性の高い Nginx アクセス ログ コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • nginx-http-concat モジュールを使用して、nginx で静的リソース ファイルをマージします。
  • Dockerでnginxをデプロイし、設定ファイルを変更する方法
  • nginx設定ファイルの場所を見つける方法の詳細な説明
  • Nginx 設定ファイルの問題により開けない不明なディレクティブの解決方法
  • nginx 設定ファイルパスとリソースファイルパスを表示する方法

<<:  Vueはビデオ再生を実装するためにビデオタグを使用します

>>:  MySQLはtruncateコマンドを使用してデータベース内のすべてのテーブルを素早くクリアします

推薦する

MySQLのパスワードを忘れた場合の対処方法

MySQL パスワードを忘れた場合の解決策: [root@localhost ~]# mysql -...

データベースを削除せずにMySQLのすべてのテーブルを素早く削除する方法

この記事では、例を使用して、データベースを削除せずに MySQL 内のすべてのテーブルをすばやく削除...

Reactでのこのリファレンスの詳細な説明

目次原因:以下を実行します: 1. コンストラクター2.レンダリング機能3.bind関数とarrow...

SQL 挿入文の書き方の説明

方法 1: INSERT INTO t1(field1,field2) VALUE(v001,v00...

.Net Core を使用して数千万のデータを MySQL にインポートする手順

目次事前準備実施方法: 1. 単一のデータを挿入する2. マージデータ挿入3. MySqlBulkL...

JSが5つ星の賞賛を獲得

この記事では、5つ星の評価を獲得するためのJSの具体的なコードを参考までに共有します。具体的な内容は...

Webデザイン: タイトルが完全に表示できない場合

<br />今日、新しくなった ChinaUI.com の Web サイトを見たのですが...

MySQL ストアド プロシージャの原理と使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考ま...

ドロップダウンリスト選択ボックスを実装するJavaScript

この記事の例では、ドロップダウンリスト選択ボックスを実装するためのJavaScriptの具体的なコー...

MySQL 5.7 の Docker バージョンを MySQL 8.0.13 にアップグレードし、データを移行する

目次1. 古いMySQL5.7データをバックアップする2. MySQL8.0.13のイメージをプルし...

CSSタグの表示モードの詳細な説明

ラベル表示モード(重要) divタグとspanタグ1. スタイルはまったく同じですが、ラベルが異なり...

MySQL 基本チュートリアル: DML ステートメントの詳細な説明

目次DMLステートメント1. レコードを挿入する2. 記録を更新する3. シンプルなクエリレコード4...

HTML ページをズームアウトした後にスクロール バーを表示するためのサンプル コード

ここでは、HTML ページのサイズを縮小した後に下部にスクロール バーを表示し、スクロール バーをス...

Dockerレジストリイメージ同期の実装アイデア

はじめに以前は、Docker イメージは Azure のコンテナー レジストリに保存されていました。...

SQL の左結合と右結合の原理と例の分析

テーブルが 2 つあり、テーブル A のレコードがテーブル B に存在しない可能性があります。左結合...