Nginx和Apache配置日志格式記錄Cookie


記錄Cookie有什么用?

  有時候我們需要通過web服務器的訪問日志來統計UV(獨立訪客),並據此分析用戶的行為。而UV是依據cookie數據得出的統計。UV相對於IP的好處是:IP是一個反映網絡虛擬地址對象的概念,UV是一個反映實際使用者的概念,更加准確地對應一個實際的瀏覽者。使用UV作為統計量,可以更加准確的了解單位時間內實際上有多少個訪問者來到了相應的頁面。

如何記錄Cookie?

Nginx:

在nginx的配置文件中,可以通過$http_cookie來訪問Cookie.

想要記錄Cookie,你需要修改nginx.conf配置文件。下面看一下具體的配置方法。

找到如下代碼,

1 #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
2 #                  '$status $body_bytes_sent "$http_referer" '
3 #                  '"$http_user_agent" "$http_x_forwarded_for"';

如果你要記錄整個Cookie,在下面添加一個新的log_format

1 log_format  access_with_cookie  '$remote_addr - $remote_user [$time_local] "$request" '
2                                 '$status $body_bytes_sent "$http_referer" '
3                                 '"$http_user_agent" "$http_x_forwarded_for" "$http_cookie"';

然后在合適的位置上添加

access_log  /usr/share/nginx/logs/access_with_cookie.log  access_with_cookie;

 

如果你要記錄Cookie的一部分,則你需要截取$http_cookie的內容。

現在假設我們在php中設置一個Cookie,

  <?php
       setcookie('uuid' , '137C6BAE-DE1F-4F5F-51ED-5E1AA1B55A17' , time() + 3600*24);
  ?>

$http_cookie大概會是這樣的

uuid=137C6BAE-DE1F-4F5F-51ED-5E1AA1B55A17

如果想僅僅記錄  137C6BAE-DE1F-4F5F-51ED-5E1AA1B55A17。

則需要在nginx.conf的server段添加

1  if ($http_cookie ~* ".*uuid=(.*)(?:;|$)")
2  {
3      set $cookie_uuid $1;
4  }

並修改logformat,用$cookie_uuid代替$http_cookie

上面的配置涉及到了nginx的正則表達式。我對於正則表達式也不是很了解,這里僅說一下我的理解,不保證正確。

$1代表正則表達式中第一個括號里邊的內容。

好了,在nginx日志里記錄Cookie大概就是上面這個樣子。

Apache

nginx配置網絡上的文章比較多,但Apache得相對少一些。把我的方法說明一下,原理是一樣的,只是語法有些差別。

Apache已經預置了獲取Cookie某個字段的方法:%{VARNAME}C,所以配置起來會相對簡單一點。

編輯httpd.conf,找到下面的內容。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

在它之上加1行,

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"  \"%{uuid}C\"" combined_with_cookie

%{VARNAME}C代表cookie中VARNAME的值。僅支持version 0 cookies。關於Apache的LogFormat可參考這里,有詳細的說明。

修改

CustomLog "logs/access_log" common

CustomLog "logs/access_log" combined_with_cookie

另外整個Cookie的值可以使用%{Cookie}i獲取。 

 

以上僅是自己的經驗總結,不保證其正確性,僅供參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM