NGINXがウェブサイトのPV、UV、独立IPをカウントする方法の詳細な説明

NGINXがウェブサイトのPV、UV、独立IPをカウントする方法の詳細な説明

Nginx: PV、UV、独立IP

ウェブサイトを作成する人なら誰でも、ウェブサイトのPV、UV、その他のウェブサイトのアクセスデータを頻繁に確認する必要があることを知っています。もちろん、ウェブサイトにCDNがある場合、nginxのローカルログは意味がありません。以下は、nginxウェブサイトのログアクセスデータの統計分析です。

コンセプト:

  • UV (ユニーク ビジター): 独立した訪問者、各独立したインターネット アクセス コンピューター (Cookie に基づく) が訪問者とみなされ、1 日 (00:00-24:00) 内に Web サイトを訪問した訪問者の数です。同じ Cookie は 1 日に 1 回のみカウントされます。
  • PV (ページ ビュー): 訪問、つまりページ ビューまたはクリック。ユーザーの Web サイトへの訪問は 1 回記録されます。ユーザーは同じページを複数回訪問し、訪問価値が蓄積される
  • 独立した IP のカウント: 同じ IP アドレスは、00:00 から 24:00 までの間、1 回だけカウントされます。Web サイトの最適化を行う友人は、この点を最も懸念しています。

まずは環境を記載します。今回はnginxバージョン1.7を実行しており、バックエンドのTomcatは動的インタラクティブプログラムを実行しています(ユーザー認証が必要。静的ページの場合はキャッシュ値が取得できず、$http_cookieは空)。以上です。

nginx ログファイルの設定

http {
  mime.types を含めます。
  デフォルトタイプ アプリケーション/オクテットストリーム;
  log_format main '$remote_addr - [$time_local] "$request" '
            ' - $status "User_Cookie:$guid" ';
 #User_Cookie はログ表示文字、$guid は変数、具体的な内容は以下に定義されています。また、ログ形式で $http_cookie と記述して、完全な Cookie 内容を表示することもできます。<br>
  ファイル送信オン;
  キープアライブタイムアウト65;
    アップストリームバックサーバー{
    ip_ハッシュ;
    サーバー 1.1.2.2:8080;
    サーバー 1.1.2.3:8080;
}
サーバー{
    聞く 80;
    server_name ローカルホスト;
    #if ( $http_cookie ~* "(.*)$") はすべてのコンテンツに一致しますif ( $http_cookie ~* "CSID=([A-Z0-9]*)"){
        $guid を $1 に設定します。
    } #CSID 文字情報のみに一致します。ここでは正規表現を使用します<br>
    access_log ログ/host.access.log メイン;
     場所 ~* ^(.*)$ {
       #limit_req ゾーン=allips バースト=1 ノードレイ;
 
       proxy_pass http://backserver;
       proxy_set_header ホスト $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header リモートホスト $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       クライアントの最大ボディサイズは8mです。
       }
    エラーページ 500 502 503 504 /50x.html;
    場所 = /50x.html {
      ルートhtml;
    }
} 

注: $http_cookie の値は「;」で区切られた Cookie 値です。

ログ出力形式

192.168.40.2 - [02/Nov/2016:15:44:35 +0800] "GET /wcm/app/main/refresh.jsp?r=1478072325778 HTTP/1.1" - 200 "User_Cookie:7F00000122A5597C46607B1C0A7EC016"
192.168.40.2 - [02/Nov/2016:15:44:35 +0800] "GET /webpic/W0201611/W020161102/W020161102566715167404.jpg HTTP/1.1" - 200 "User_Cookie:7F00000122A5597C46607B1C0A7EC016"
119.255.31.109 - [02/Nov/2016:15:44:36 +0800] "GET /wcm/app/main/refresh.jsp?r=1478072510132 HTTP/1.1" - 200 "User_Cookie:7F000001237921BE9237838AEC65704D"
119.255.31.109 - [02/Nov/2016:15:44:36 +0800] "GET /wcm/app/message/message_query_service.jsp?READFLAG=0&MSGTYPES=1%2C2%2C3 HTTP/1.1" - 200 "User_Cookie:7F000001237921BE9237838AEC65704D"
192.168.40.2 - [02/Nov/2016:15:44:37 +0800] "GET /wcm/app/message/message_query_service.jsp?READFLAG=0&MSGTYPES=1%2C2%2C3 HTTP/1.1" - 200 "User_Cookie:7F00000123D3BF2345115EAAC21F71E0"
192.168.40.2 - [02/Nov/2016:15:44:37 +0800] "GET /wcm/app/message/message_query_service.jsp?READFLAG=0&MSGTYPES=1%2C2%2C3 HTTP/1.1" - 200 "User_Cookie:7F00000123EF73896DF98EDA9950944E"
192.168.40.2 - [02/Nov/2016:15:44:37 +0800] "GET /wcm/app/message/message_query_service.jsp?READFLAG=0&MSGTYPES=1%2C2%2C3 HTTP/1.1" - 200 "User_Cookie:7F00000123FE0F9C397E1A8F0C4F044B"
192.168.40.2 - [02/Nov/2016:15:44:37 +0800] "GET /wcm/app/main/refresh.jsp?r=1478072511427 HTTP/1.1" - 200 "User_Cookie:7F00000123A465B7EA1DE0AF0AE671B7"
119.255.31.109 - [02/Nov/2016:15:44:38 +0800] "GET /wcm/app/message/message_query_service.jsp?READFLAG=0&MSGTYPES=1%2C2%2C3 HTTP/1.1" - 200 "User_Cookie:7F00000123D89B11302DF80AE773C900"

PV統計

単一のリンク アドレスへの訪問回数をカウントできます。

[root@localhost ログ]# grep index.shtml host.access.log | wc -l

総PV:

[root@localhost ログ]# awk '{print $6}' host.access.log | wc -l

専用IP

[root@localhost ログ]# awk '{print $1}' host.access.log | sort -r | uniq -c | wc -l

UV統計

[root@localhost ログ]# awk '{print $10}' host.access.log | sort -r | uniq -c | wc -l

クッキーテストページ

クッキーの種類に関しては、次の HTML コードを使用して、入力する必要があるクッキーを編集および追加できます。

#インデックス
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<ヘッド>
<meta http-equiv="コンテンツタイプ" content="text/html; charset=gbk">
<meta http-equiv="Refresh" content="10"> //テストのため、10秒ごとにページを更新します</head>
<本文>
<h1>test.test.com ドメイン テスト</h1>
このドメインの Cookie は以下にリストされています<br>
<p>
<スクリプト>
document.cookie="guid=A1UD8E5512451111111111"; // クッキーの種類、appenddocument.cookie="city=beijing"; // クッキーの種類、appenddocument.write(document.cookie); // 既存のリスト</script>
</p>
</本文>
</html> 

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • シェル統計pvとuv、独立したipメソッド

<<:  MySQL の分離レベル、ロック、MVCC の紹介

>>:  知っておくべき 7 つのネイティブ JS エラーの種類

推薦する

スクロール画像バーを実現するための CSS サンプルコード

一部の Web サイトでは、画像が連続的にスクロールしているのをよく見かけます。この効果は、CSS ...

Vue で動的に読み込まれたローカル画像を処理する方法

問題を見つける今日は、vue ファイルにローカル画像を導入する際に問題が発生したので、この記事を書き...

MySQL データベース インデックスが B+ ツリーの使用を選択するのはなぜですか?

MySQL データベース インデックスが B+ ツリーを使用する理由をさらに分析する前に、データ構...

Vue3 テーブルコンポーネントの使用

目次1. Antデザインビュー1. 公式ウェブサイトアドレス2. 使い方3.電子書籍テーブルを表示す...

CSSフロートの特性についての簡単な説明

この記事では、CSS フロートの特徴を紹介します。皆さんと共有し、自分用のメモとして残したいと思いま...

Windows システムに mysql5.7.21 をインストールするための詳細なチュートリアル

MySQL インストーラーは、MySQL ソフトウェアのあらゆるニーズに対応する、使いやすいウィザー...

WeChatアプレットwebViewにH5を埋め込む方法の例

序文WeChat ミニプログラムは新しいオープン機能を提供します!ついにミニプログラムにHTMLペー...

Docker で Harbor パブリック リポジトリを構築する方法の例

前回のブログ投稿では、レジストリのプライベート ウェアハウスについて説明しました。今日は、Harbo...

Dockerfileを使用してDockerイメージを構築する手順

Dockerfile は、命令を含むテキスト ファイルです。各命令はレイヤーを構築するため、各命令の...

h5入力ボックスプロンプト+通常のテキストボックスプロンプトを実装する方法

XML/HTML コードコンテンツをクリップボードにコピー<入力 id = "ユーザ...

Dockerにおけるオーバーレイネットワークの詳細な説明

Docker 公式ドキュメントからの翻訳、原文: https://docs.docker.com/n...

Dockerリポジトリの一般的なコマンドの詳細な説明

ログイン dockerログインdocker login コマンドを実行し、ユーザー名、パスワード、メ...

Linuxでmore、less、catコマンドを使用してファイルの内容を表示します

Linux では、cat、more、less の各コマンドを使用してファイルの内容を表示できます。c...

MySQL 最適化 query_cache_limit パラメータの説明

クエリキャッシュ制限query_cache_limit は、単一のクエリで使用できるバッファ サイズ...

Webリクエストと処理のTomcatソースコード分析

目次序文1. エンドポイント2. 接続ハンドラ3. コヨーテ4. コンテナ責任チェーンパターン序文T...