Nginx访问日志
cd /usr/local/nginx/conf/vhost
先看看日志格式
[root ~]# grep -A2 log_format /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"';
vim /usr/local/nginx/conf/nginx.conf //搜索log_format
combined_realip 日志格式的名字
$remote_addr 客户端IP(公网IP) 访问网站的用户的出口IP
$http_x_forwarded_for 代理服务器的IP
$time_local 服务器本地时间
$host 访问主机名(域名)
$request_uri 访问的url地址
$status 状态码
$http_referer referer
$http_user_agent user_agent
$remote_addr
默认的日志格式比较简单,所以修改一下。
除了在主配置文件nginx.conf里定义日志格式外,还需要在虚拟主机配置文件中增加
vim test.com.conf
access_log /tmp/.log nan;
使用access_log来指定日志的存储路径,最后面指定日志的格式名字,测试过程如下:
/usr/local/nginx/sbin/nginx -t //检测是否有错误
/usr/local/nginx/sbin/nginx -s reload //重新加载
curl -x127.0.0.1:80 -I
curl -x127.0.0.1:80 -I
cat /tmp/test.com.log
Nginx日志切割
Nginx的日志很简单,不像httpd还有自带的切割工具,要想切割Nginx日志需要借住系统的切割工具或者自定义脚本。
自定义shell 脚本
vim /usr/local/sbin/nginx_log_rotate.sh//写入如下内容
#! /bin/bash
## 假设nginx的日志存放路径为/tmp/
d=`date -d "-1 day" +%Y%m%d`
logdir="/tmp/"
nginx_pid="/usr/local/nginx/logs/nginx.pid"
cd $logdir
for log in `ls *.log`
do
mv $log $log-$d
done
/bin/kill -HUP `cat $nginx_pid`
sh -x /usr/local/sbin/nginx_log_rotate.sh //启动脚本 -x可以看到执行过程
(记得定期删除日志 find /tmp/ -name *.log-* -type f -mtime +30 |xargs rm)
写完脚本后,还需要增加任务计划,做测试可以不保存但应知道。
[root vhost]# crontab -e
0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh
静态文件不记录日志和过期时间
配置如下
vim /usr/local/nginx/conf/vhost/.conf
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 7d;
access_log off;
}
location ~ .*\.(js|css)$
{
expires 12h;
access_log off;
}
使用location~可以指定对应的静态文件,expires配置过期时间,而access_log配置为off就可以不记录访问日志了。
测试如下:
/usr/local/nginx/sbin/nginx -t //检测是否有错误
/usr/local/nginx/sbin/nginx -s reload //重新加载
(cd /data/wwwroot/
vim 1.gif
vim 2.js //此仅仅为模拟测试)
echo "1111111111111111" > /data/wwwroot/ //创建gif文件
echo "2222222222222222" > /data/wwwroot/.js //创建js文件
curl -x127.0.0.1:80 -I //访问gif类型的文件,缓存过期时间为12小时
curl -x127.0.0.1:80 -I .js //访问js类型的文件,缓存过期时间为7d
可以清楚的看到Cache-control对应的时间大小,另外也可以看一下访问日志
cat /tmp/.log
访问了gif以及js,但都没有记录到日志中,效果实现了。