首页 > 学院 > 操作系统 > 正文

nginx日志处理

2024-06-28 16:03:58
字体:
来源:转载
供稿:网友

nginx的配置文件 /etc/nginx.conf文件中

定义Nginx的日志格式使用 log_format 这个配置项,默认的格式为:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';

如果将Nginx服务器作为web服务器,位于负载均衡设备、Squid、Nginx反向代理之后,就不能获取到客户端的真实ip地址了。原因是经过反向代理后,由于在客户端和web服务器之间增加了中间层,

因此web服务器无法直接拿到客户端的IP,通过$remote_addr变量拿到的将是反向代理服务器的IP地址。但是反向代理服务器在转发请求的Http头信息中,可以增加X-Forwarded-For信息,用于记录原有的客户端IP地址和原来客户端请求的服务器地址。

为每一个虚拟站点保存日志(包括访问日志和错误日志)用 access_log 以及 error_log 这两个配置项

        access_log  /var/log/nginx/access.log  main;        error_log   /var/log/nginx/error.log notice;

由于服务器上的日志一直处于增长中,我们需要保证磁盘空间,可以考虑只保留一周内的日志文件,另外,当日的日志文件不要太大,太大会引起磁盘读写效率问题。

所以这里写了一个shell脚本,用于删除一周前的日志文件以及将重新生成当天的日志文件,在每天凌晨执行该任务。

vim cut_nginx_log.sh

#!/bin/bash#执行脚本删除一些访问日志和错误日志文件#nginx log dirlogs_path="/var/log/nginx/"rm -f ${logs_path}access_$(date -d "last week" +"%Y%m%d").logrm -f ${logs_path}error_$(date -d "last week" +%Y%m%d").logmv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").logmv ${logs_path}error.log ${logs_path}error_$(date -d "yesterday" +"%Y%m%d").logkill -USR1 `cat /var/run/nginx/nginx.pid`

Crontab的格式定义:

  第1列分钟1~59第2列小时1~23(0表示子夜)第3列日1~31第4列月1~12第5列星期0~6(0表示星期天)第6列要运行的命令

crontab -e

00 00 * * * /bin/bash /usr/local/nginx/script/cut_nginx_log.sh

Ctrl+o保存 Ctrl+x退出

测试证明 上述脚本能满足要求。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表