Nginx配置日志格式記錄cookie
1、 一般用來做UV統計,或者獲取用戶token等。
配置方式:
在nginx的配置文件中有個變量:$http_cookie來獲取cookie的信息。配置方式很簡單,只需要在nginx配置文件的http段,新添加一個log_format就可以了:
http{
log_format hehe '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $http_cookie"';
}
2、 在需要獲取cookie信息的location里面添加一個access_log配置即可:
location / {
proxy_pass http://ip:port;
access_log /data/access.log hehe;
}
@ hehe 就是上面定義的log_format 的名字,只要acces_log 后面帶這個名字的日志,就會按照定義的格式輸出日志。
3、 reload一下nginx就可以在日志里面看到cookie信息
# nginx -s reload
4、 上述的方法是降所有的cookie信息都輸出到access.log里面,所以需要找一個分比較大的空間來存放。如果只是想要cookie里的部分信息,可以使用下面的方法定義:
這個是作用於server段的,所以要在server下定義:
server {
if ($http_cookie ~* “token=(.*) (?:;|$)”)
{
set $cookie_token $1;
}
}
並修改logformat,用$cookie_token替換$http_cookie。$1表示第一個括號里面的內容。
5、配置上述內容后,訪問量大了以后會導致日志文件會非常的大,導致磁盤空間不足。
解決辦法:
1、第一種可以將nginx的日志輸出到一個較大的磁盤上面。修改nginx的log路徑就好了。
2、第二種由於日志是實時上傳到elk的,所以可以將文件做一個清理。(如果不擔心少幾條日志的話):
#!/bin/bash used=`df -h | grep "vda1"| awk '{print $5}' | awk -F '%' '{print $1}'` if [ $used -ge 90 ];then >/var/log/nginx/share.log >/var/log/nginx/access_share.log fi
[root@loadbalance1 scripts]# crontab -l * * */1 * * /data/scripts/rm-logs.sh 2>&1 & */1 * * * * /data/scripts/share.sh 2>&1 &