最近整理公司服务器,对nginx复习了一遍。记录下,备忘。
一个合理有效的访问日志记录,将对维护服务器,网站稳定运行,提供有力的帮助
variable 用到的变量
工欲善其事必先利其器,日志格式里各个变量都是啥玩意呀?
-
$remote_addr
:访问的ip (重要) -
$http_x_forwarded_for
:代理携带的原始IP(重要,使用了CDN 服务器,反向代理,负载均衡需要) -
$request
:请求内容(重要) -
$remote_user
:客户端用户名称(这个一般没啥卵用,基本没取到过) -
$time_local
:访问时间 -
$status
:请求状态 -
$body_bytes_sent
:发送给客户端文件主体内容大小(重要) -
$http_referer
:从啥链接访问过来的(鸡肋的玩意,基本没取到过) -
$http_user_agent
:浏览器(不一定是浏览器)的相关信息,(重要,比如干掉蜘蛛,比如干掉低端的hacker,特别是只会用工具的hacker) - 嗯,够用了
log_format 访问日志格式定制
知道了以上的变量,该来定制属于自己的日志格式了.这段代码写在`http{}`里
log_format xxlog '$remote_addr [$time_local] "$request" $status <$body_bytes_sent> "$http_user_agent" $http_x_forwarded_for';
这里需要注意一点,$http_x_forwarded_for不是默认就有的,在有中转服务器(CDN 服务器)设置的
比如我这业务需要是由A服务器反向代理到B服务器那么我在转发时,就需要带着原始IP:`$remote_addr`
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass 192.168.1.2:8081;
access_log 设置日志文件名、位置、格式
一般写在http{server{}}
里,可对不同server指定
access_log 地址 采用格式;
access_log /home/wwwlogs/web_access.log xxlog;
一些日志心得脚本
程序员最擅长干嘛?偷懒呀!偷懒靠什么,脚本呀!
- 当天访问数
grep "07/Dec/2016" ./web_access.log|wc -l
- 指定ip在当天访问情况
grep "07/Dec/2016" ./web_access.log|grep "192.168.1.2"
- 日志分割脚本
#!/bin/bash base_path='/home/wwwlogs' log_path=$(date -d yesterday +"%Y%m") day=$(date -d yesterday +"%d") mkdir -p $base_path/$log_path mv $base_path/web_access.log $base_path/$log_path/web_access_$day.log /usr/local/nginx/sbin/nginx -s reopen
-
crontab
定时任务,这里为2点1分crontab -e 01 02 * * * /xxx/xxx/nginx_split.sh
网友评论