Nginx访问日志、日志切割、静态文件管理

摘要:12.10 访问日志 Nginx日志格式: [root@adailinux ~]# vim /usr/local/nginx/conf/nginx.conf log_format combined_realip \'$remote_addr $http_x_forwarded_for [$time_local]\' \' $host \"$request_uri\" $status\' \' \"

12.10 访问日志

Nginx日志格式:

002UASMrzy7605pjKJv15&690.jpg

[root@adailinux ~]# vim /usr/local/nginx/conf/nginx.conf log_format combined_realip \'$remote_addr $http_x_forwarded_for [$time_local]\' \' $host "$request_uri" $status\' \' "$http_referer" "$http_user_agent"\';

说明:
“combined_ realip”:日志格式名称;\'$remote_ addr $http_ x_ forwarded_ for [$time_ local]\' \' $host "$request_uri" $status\' \' "$http_ referer" "$http_ user_ agent"\' :日志内容。
注释:

名称含义 $remote_addr客户端IP(公网IP) $http_x_forwarded_for代理服务器的IP $time_local服务器本地时间 $host访问主机名(域名) $request_uri访问的URL地址 $status状态码 $http_refererreferer $http_user_agentuser_agent 定义虚拟主机日志格式

定义虚拟主机的前提是在Nginx配置文件中设定日志格式,然后才能在虚拟主机中进行调用(格式名称)。

[root@adailinux ~]# cd /usr/local/nginx/conf/vhost/ [root@adailinux vhost]# ls aaa.com.conf test.com.conf 定义test.com.conf日志格式: [root@adailinux vhost]# vim test.com.conf …… access_log /tmp/test.com.log combined_realip; #指定日志位置及格式 检查错误: [root@adailinux vhost]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

注: 如果不指定日志格式,系统使用默认日志格式,记录内容较简单。

检测:

[root@adailinux vhost]# curl -x127.0.0.1:80 test.com This is test.com [root@adailinux vhost]# cat /tmp/test.com.log 127.0.0.1 - [11/Aug/2017:15:09:54 +0800] test.com "/" 200 "-" "curl/7.29.0" 12.11 Nginx日志切割

因为Nginx没有自带的日志切割工具,所以需要借助系统日志切割命令或使用日志切割脚本。

日志切割脚本

为了方便管理,shell脚本统一保存位置:/usr/local/sbin/

[root@adailinux vhost]# vim /usr/local/sbin/nginx_log_rotate.sh #! /bin/bash d=`date -d "-1 day" +%Y%m%d` #定义切割时间(切割一天前的日志) logdir="/tmp/" #此处指定要切割的日志路径(该路径来自虚拟主机配置文件) nginx_pid="/usr/local/nginx/logs/nginx.pid" #调用pid的目的是执行命令:/bin/kill -HUP `cat $nginx_pid` #该命令等价于命令:nginx -s reload(重新加载文件),确保与虚拟主机配置文件变更保持同步 #该地址来自nginx配置文件 cd $logdir for log in `ls *.log` do mv $log $log-$d done #此处使用通配进行循环,对所有复合条件的日志文件进行切割 /bin/kill -HUP `cat $nginx_pid` #执行此命令进行重载生成新的日志文件来记录新的日志

执行该脚本:

[root@adailinux vhost]# sh -x /usr/local/sbin/nginx_log_rotate.sh ++ date -d \'-1 day\' +%Y%m%d + d=20170810 + logdir=/tmp/ + nginx_pid=/usr/local/nginx/logs/nginx.pid + cd /tmp/ ++ ls test.com.log yum.log + for log in \'`ls *.log`\' + mv test.com.log test.com.log-20170810 + for log in \'`ls *.log`\' + mv yum.log yum.log-20170810 ++ cat /usr/local/nginx/logs/nginx.pid + /bin/kill -HUP 1251

说明: -x选项的作用是显示脚本执行过程。

注: 该脚本配合任务计划cron使用,定期进行切割和清理。

12.12 静态文件不记录日志&过期时间

核心配置参数:

[root@adailinux vhost]# vim test.com.conf location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ #匹配文件类型 { expires 7d; #过期时间为7天 access_log off; #不记录该类型文件的访问日志 } location ~ .*.(js|css)$ { expires 12h; #过期时间为12小时 access_log off; #不记录该类型文件的访问日志 } access_log /tmp/test.com.log combined_realip; #指定日志位置及格式

检测:

[root@adailinux vhost]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@adailinux vhost]# /usr/local/nginx/sbin/nginx -s reload 访问index.html: [root@adailinux vhost]# !curl curl -x127.0.0.1:80 test.com This is test.com [root@adailinux vhost]# !cat cat /tmp/test.com.log 127.0.0.1 - [11/Aug/2017:17:45:28 +0800] test.com "/" 200 "-" "curl/7.29.0" 即:有日志! 访问baidu.png文件: [root@adailinux test.com]# curl -x127.0.0.1:80 test.com/baidu.png -I HTTP/1.1 200 OK Server: nginx/1.12.1 Date: Fri, 11 Aug 2017 09:47:57 GMT Content-Type: image/png Content-Length: 3706 Last-Modified: Tue, 01 Aug 2017 10:13:45 GMT Connection: keep-alive ETag: "59805459-e7a" Expires: Fri, 18 Aug 2017 09:47:57 GMT Cache-Control: max-age=604800 Accept-Ranges: bytes 说明:max-age=604800s=7天,即该文件缓存的过期时间为7天! [root@adailinux test.com]# cat /tmp/test.com.log 127.0.0.1 - [11/Aug/2017:17:45:28 +0800] test.com "/" 200 "-" "curl/7.29.0" 即:无该文件的访问日志!!!