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退出
测试证明 上述脚本能满足要求。
新闻热点
疑难解答