Nginx配置日志格式記錄cookie


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 &

 


免責聲明!

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



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