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 エラーの種類

推薦する

js のプロトタイプ、プロトタイプ オブジェクト、プロトタイプ チェーンの包括的な分析

目次プロトタイプを理解するプロトタイプオブジェクトを理解するインスタンスプロパティとプロトタイププロ...

Win10 での MySQL 8.0.15 のインストールと設定のグラフィック チュートリアル

この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...

Node.js コンソールで強調表示されたコードを印刷する方法

序文コードを実行してエラーが発生すると、エラーが出力されます。エラーにはスタック情報が含まれており、...

Dockerコンテナを閉じずに終了する方法の詳細な説明

Docker コンテナに入った後、コンテナを終了すると、コンテナは Exited 状態に変わります。...

Vueフィルターとカスタム命令の使用

目次フィルター01.とは02. やり方(1)フィルターを定義する(2)使用方法(3)フィルタパラメー...

例を通してMySQLの更新がテーブルをロックするかどうかを判定する

2つのケース: 1. 索引あり 2. 索引なし前提条件:方法: コマンドラインを使用してシミュレート...

Linuxにグラフィカルインターフェースをインストールする方法

1. Linuxのインストール(rootユーザー操作) 1. vncserver をインストールしま...

Linux における「!」の知られざる使用法のまとめ

序文実際、Linux では、控えめな「!」が驚くほど多くの用途で使用されています。この記事では、「!...

vite2.x は ant-design-vue@next コンポーネントのオンデマンド読み込みを実装します。

1. 使用バージョンバイト:2.0 ant-design-vue: 2.0.0-rc.8ヴュー:3...

美しい FLASH ウェブサイト デザイン例 50 選

Flashにより、デザイナーや開発者はブラウザ上でリッチなコンテンツを提供し、動き、インタラクティブ...

HTML 選択タグにリンクを追加する 3 つの方法

最初のもの:コードをコピーコードは次のとおりです。 <html> <ヘッド>...

MySQL 5.7.17 winx64 解凍版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.17 winx64解凍版のインストールと設定方法を紹介します。具体...

MySQL 5.6 zipパッケージのインストールチュートリアルの詳細

これまでは、拡張子が .msi のファイル、つまり、完全なインストールが使用されていました。しかし、...

MySQL における UNION と UNION ALL の基本的な使い方

データベースでは、UNION キーワードと UNION ALL キーワードの両方が 2 つの結果セッ...

divとtableの選択と組み合わせ方について簡単に説明します

ページレイアウトは、Web ページを扱い始めた頃からずっと気にかけていたことです。初期のテーブル構造...