Nginx记录访问cookie到日志

Date:2013-04-23 Author:阿债 Category:Linux Tag:nginx, log, cookie, php

问题描述

在某个PHP网站的日志中记录下session id,比使用ip地址能更好地跟踪用户访问

解决方法

在nginx.conf的http中增加一种日志格式

1
2
3
log_format  sess  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" "$var_sessid"'

在对应网站的server中添加

1
2
3
4
5
6
7
set $var_sessid "-";
if ( $http_cookie ~* "PHPSESSID=(\S+)(;.*|$)")
{
    set $var_sessid $1;
}

access_log  logs/test.access.log  sess;

重启nginx服务后,此网站日志文件每行后面多出一列PHP中的session_id()的值

非PHP网站

对于不是PHP的网站,甚至是静态网站,我们需要开启nginx自带的userid模块

在对应网站的server中添加(请修改example.com为您自己的域名)

1
2
3
4
5
6
7
8
9
userid  on;
userid_domain  example.com;
set $var_sessid "-";
if ( $http_cookie ~* "uid=(\S+)(;.*|$)")
{
    set $var_sessid $1;
}

access_log  logs/test.access.log  sess;