Nginx记录访问cookie到日志
问题描述
在某个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; |