Nginx访问日志
Nginx的文件格式存在于主配置文件中。 /usr/local/nginx/conf/nginx.conf 然后搜索log_format找到他的配置文件 这样我们就可以进行日志的格式配置了。
我们常用如下配置。 $remote_addr 客户端IP(公网IP) $http_x_forwarded_for 代理服务器的IP $time_local 服务器本地时间 $host 访问主机名(域名) $request_uri 访问的url地址 $status 状态码 $http_referer referer $http_user_agent user_agent 除了在主配置文件nginx.conf里定义日志格式外,还需要在虚拟主机配置文件中增加。 我们用 access_log来定义他的访问日志路径在哪里。 我们用test.com.conf来举例子。我们在vhost目录下打开test.com.conf 然后输入 access_log /tmp/test.com.log aming; 这里我们需要注意的是我们不要把这行配置放到if的大括号中,而是要放到server的大括号中。 然后我我们进行语法检验和重新载入 /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload 然后我们访问以下我们定义的test2.com、test3.com、test4.com,然后再次访问cat /tmp/test.com.log。这样日志中就出现了我们刚才访问的日志了。 127.0.0.1 - [25/Apr/2018:20:45:41 +0800] test2.com "/admin/index.html/kldfjsaldjflk" 301 "-" "curl/7.29.0" 127.0.0.1 - [25/Apr/2018:20:46:32 +0800] test3.com "/admin/index.html/kldfjsaldjflk" 301 "-" "curl/7.29.0" 127.0.0.1 - [25/Apr/2018:20:46:37 +0800] test2.com "/admin/index.html/kldfjsaldjflk" 301 "-" "curl/7.29.0"
Nginx日志切割
首先我们创建一个shell脚本,以后我么可以将脚本放到 /usr/local/sbin下。
vim /usr/local/sbin/nginx_logrotate.sh
然后输入一下内容
#! /bin/bash
d=date -d "-1 day" +%Y%m%d
(生成昨天的日期,格式为年-月-日)
logdir="/data/logs"
nginx_pid="/usr/local/nginx/logs/nginx.pid" (是为了执行最后一条命令,pid的路径一定要写对)
cd $logdir (进入到日志目录下)
for log in ls *.log
(for循环)
do
mv $log $log-$d (然后将日志改名字)
done
/bin/kill -HUP cat $nginx_pid
(从新加载,生成新的log)
然后我们执行一下脚本,其中-x是显示执行过程,sh是执行脚本
sh -x /usr/local/sbin/nginx_logrotate.sh
++ date -d '-1 day' +%Y-%m-%d
- d=2018-04-24
- logdir=/tmp/
- nginx_pid=/usr/local/nginx/logs/nginx.pid
- cd /tmp/ ++ ls test.com.log
- for log in '
ls *.log
' - mv test.com.logtest.com.log-2018-04-24 ++ cat /usr/local/nginx/logs/nginx.pid
- /bin/kill -HUP 1387 然后查看一下tmp目录,发现多了两个文件 test.com.log-2018-04-24 test.com.log 这就是日志切割,以后每天都可以生成。 每天生成机会占用磁盘空间,我们可以用find命令将过去没用的日志删除。 find /tmp/ -name .log- -type f -mtime +30 |xargs rm 然后我么需要做一个计划任务,每天0点执行。 crontab -e 然后在里面,输入0 0 * * * /bin/bash /usr/local/sbin/nginx_logrotate.sh 这样就可以每天晚上0点执行日志切割脚本了。
静态文件不记录日志和过期时间
网站上有很多的图片等静态文件,这个量会很大,产生的日志也会占用大量的空间,所以我们可以将日志设置为不记录日志和过期时间。
首先编辑nginx.com.conf这个配置文件
然后加入以下内容
location ~ ..(gif|jpg|jpeg|png|bmp|swf)$
{
expires 7d;
access_log off;
}
location ~ ..(js|css)$
{
expires 12h;
access_log off;
}
其中expires为过期时间。
然后保存退出,检查语法是否错误和重新加载。