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获取。

以上仅是自己的经验总结,不保证其正确性,仅供参考。

时间: 2024-11-05 20:49:24

Nginx和Apache配置日志格式记录Cookie的相关文章

Nginx配置日志格式记录cookie

Nginx配置日志格式记录cookie1. 一般用来做UV统计,或者获取用户token等. 配置方式:  在nginx的配置文件中有个变量:$http_cookie来获取cookie的信息.配置方式很简单,只需要在nginx配置文件的http段,新添加一个log_format就可以了:http{log_format  hehe  '$remote_addr - $remote_user [$time_local] "$request" '               '$status

Linux centos7 VMware Apache访问日志不记录静态文件、访问日志切割、静态元素过期时间

一.Apache访问日志不记录静态文件 网站大多元素为静态文件,如图片.css.js等,这些元素可以不用记录 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //改为如下 把虚拟主机配置文件改成如下: <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.111.com ServerAlias 111.com SetEn

Nginx 日志中记录cookie

因开发要求,在Nginx日志中需要记录Cookie信息,以便开发查询系统发生了什么,我的日志是以json格式显示,需要在nginx.conf文件中添加如下信息: 1,#vim  nginx.conf http {    include       mime.types;    default_type  application/octet-stream;   log_format logstash_json '{"@timestamp":"$time_iso8601"

Nginx演练(2)配置日志访问

在互联网企业中,日志分析是特别重要的一个模块.通过对日志的分析,可以获得网站的一些指标信息,和网站访问情况.另外,日志对于统计排错来说非常有利的. nginx日志相关的配置如access_log.log_format.open_log_file_cache.log_not_found.log_subrequest.rewrite_log.error_log. 日志相关的配置参数 1.access_log指令 1.1语法 Syntax:access_log path [format [buffer

nginx和apache配置目录浏览功能

今天工作需要,要给客户提供一个patch的下载地址,于是想用nginx的目录浏览功能来做,需要让客户看到指定一个目录下的文件列表,然后让他自己来选择该下载那个文件: 我们都知道在apache下可以配置访问web服务器的某个路径时,自动显示其目录下面的文件列表的,其实Nginx一点也不比apache弱,它当然也可以实现这个功能,而且还非常容易和简单:主要用到autoindex 这个参数来开启,其配置如下: 复制代码代码如下: location / {           root /data/ww

LAMP架构(apache访问日志不记录静态文件,静态元素过期时间,apache日志切割)

一.apache访问日志不访问静态文件 浏览器打开后按f12会会出现一个界面,点network,会出现很多请求,访问日志里会记载,有些静态的图片或者文件也会记载,太浪费磁盘空间和磁盘io.所以我们要让日志不记录静态文件 [[email protected] ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf SetEnvIf Request_URI ".*\.gif$" img SetEnvIf Request_URI &

Spring+SpringMVC+Mybatis 利用AOP自定义注解实现可配置日志快照记录

目的: 需要对一些事物的操作进行日志记录,如果在service内进行记录,大量的代码重复,并且维护比较麻烦.所以采用AOP的方式对service进行拦截.使用自定义注解的目的则是判断是否需要记录日志和传递额外的信息. 方式 本次解决方案十分感谢博主-跳刀的兔子的博文 本文绝大部分参考与本文,略有不同,所以做一些整理,博主的文章更详细一些. 1.首先新建自定义注解 @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @

apache 定义日志格式 及日志记录

操作步骤: 一:在apache主配置文件里定义日志的格式 vim /usr/local/apache2/conf/httpd.conf        <IfModule log_config_module>            LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined          

Nginx和apache 配置

当nginx需要做反向代理和负载均衡的时候配置如下: upstream mir_k8s_service_server { server 10.111.11.83:8080 weight=10; server 10.111.11.84:8080 weight=10; #也可以不需要weight, 用ip_hash; #ip_hash; #server 10.111.11.83:8080; #server 10.111.11.84:8080; } server { listen 3051; loca