{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
之前拷贝的nginx.conf下就有关于访问日志的相关
打开配置文件
[root@aminglinux-02~]#vim/usr/local/nginx/conf/nginx.conflog_formatcombined_realip'$remote_addr$http_x_forwarded_for[$time_local]''$host"$request_uri"$status''"$http_referer""$http_user_agent"';
combined_realip日志格式的名字,决定了虚拟主机引用日志的类型nginx配置文件,以“;”分号结尾,配置文件一段如果没有分号结尾,表示这一段还没有结束,就算中间执行了换行。
$remote_addr//客户端ip(公网ip)$http_x_forwarded_for//代理服务器的ip$time_local//服务器本地时间$host//访问主机名(域名)$request_uri//访问的url地址$status//状态码$http_referer//referer(跳转页)$http_user_agent//user_agent(标识)
定义虚拟主机日志打开虚拟主机配置文件在server项内任意一行加入下面这个配置
access_log/tmp/test.com.logcombined_realip;
配置好以后检查语法&&重新加载服务
-t&&-sreload
测试是否产生日志
[root@aminglinux-02~]#curl-x127.0.0.1:80test2.com/admin/index.html-ihttp/1.1301movedpermanentlyserver:nginx/1.12.1date:fri,11aug201716:51:26gmtcontent-type:text/htmlcontent-length:185connection:keep-alivelocation:http://test.com/admin/index.html[root@aminglinux-02~]#curl-x127.0.0.1:80test2.com-ihttp/1.1301movedpermanentlyserver:nginx/1.12.1date:fri,11aug201716:51:31gmtcontent-type:text/htmlcontent-length:185connection:keep-alivelocation:http://test.com/[root@aminglinux-02~]#curl-x127.0.0.1:80test1.com-ihttp/1.1200okserver:nginx/1.12.1date:fri,11aug201716:51:36gmtcontent-type:text/htmlcontent-length:26last-modified:thu,10aug201716:27:09gmtconnection:keep-aliveetag:"598c895d-1a"accept-ranges:bytes[root@aminglinux-02~]#cat/tmp/test.com.log127.0.0.1-[12/aug/2017:00:51:17+0800]test3.com"/admin/index.html"301"-""curl/7.29.0"127.0.0.1-[12/aug/2017:00:51:26+0800]test2.com"/admin/index.html"301"-""curl/7.29.0"127.0.0.1-[12/aug/2017:00:51:31+0800]test2.com"/"301"-""curl/7.29.0"12.11nginx日志切割
nginx没有自带日志切割工具只能借助系统自带的工具或者使用脚本实现
规则:所有的shell的脚本,全部存放在/usr/local/sbin/目录下
[root@aminglinux-02~]#vim/usr/local/sbin/nginx_logrotate.sh#!/bin/bash##假设nginx的日志存放路径为/data/logs/d=`date-d"-1day"+%y%m%d`//生成昨天的日期,格式为年月日logdir="tmp/"//上一节的时候,定义了日志存放在/tmp/目录下nginx_pid="/usr/local/nginx/logs/nginx.pid"//查找nginx的pidcd$logdir//进入“logdir”目录forlogin`ls*.log`//开始语句循环,看错有哪些log后缀的文件do//执行mv$log$log-$d//将log改名为《原名字-“`date-d"-1day"+%y%m%d`”这个结尾的文件》done//结束/bin/kill-hup`cat$nginx_pid`//重新加载,生成一个新的“nginx_pid="/usr/local/nginx/logs/nginx.pid"”
执行脚本
sh-x/usr/local/sbin/nginx_logrotate.sh
-x选项使运行过程可见
[root@aminglinux-02~]#sh-x/usr/local/sbin/nginx_logrotate.sh++date-d'-1day'+%y%m%d+d=20170811+logdir=/tmp/+nginx_pid=/usr/local/nginx/logs/nginx.pid+cd/tmp/++lstest.com.log+forlogin'`ls*.log`'+mvtest.com.logtest.com.log-20170811++cat/usr/local/nginx/logs/nginx.pid+/bin/kill-hup1202知识点:一、日志时间切割的定义
写shell脚本的时候,如果有命令不明白,可以直接把命令运行一下就知道结果了假设这个命令“d=date-d"-1day"+%y%m%d”不明白意思ctrl+z把当前操作暂停丢到后台运行命令看看结果
[root@aminglinux-02~]#date-d"-1day"+%y%m%d20170811[root@aminglinux-02~]#date2017年08月12日星期六01:04:07cst
就是时间,而且是昨天的时间,因为目前做的日志切割都是以天为单位,而且,日志需要过了当天23点59分59秒以后到第二天的0点0分01秒才切割
[root@aminglinux-02~]#ls/usr/local/nginx/logs/access.logerror.lognginx_error.lognginx.pid三、循环语句理解
forfin'ls';dols-l$f;done
for循环开始,f表示文件,in表示做什么,‘ls’in执行的东西;do执行ls-f$f;done结束
脚本写完以后,需要写一个计划,让脚本在规定的时间运行。
crontab-e00***/bin/bash/usr/local/sbin/nginx_logrotate.sh
==长时间累积,会生成大量的日志需要进行清理==
fidn/tmp/-typef-name*.log-*-mtime+30|xargsrm12.12静态文件不记录日志和过期时间
打开虚拟主机配置文件
[root@aminglinux-02~]#vim/usr/local/nginx/conf/vhost/test.com.conflocation~.*.(gif|jpg|jpeg|png|bmp|swf)$//匹配gif|jpg|jpeg|png|bmp|swf后缀的文件{expires7d;//7天后过期access_logoff;//匹配“.*.(gif|jpg|jpeg|png|bmp|swf)”关闭记录日志}location~.*.(js|css)${expires12h;//12个小时后过期access_logoff;//匹配“.*.(js|css)”关闭记录日志}
配置完成后检查语法和重新加载服务
-t&&-sreload
测试配置是否成功为了方便测试线创建2个文件
[root@aminglinux-02~]#vim/data/wwwroot/test.com/1.gif[root@aminglinux-02~]#vim/data/wwwroot/test.com/2.js
测试是否记录日志
[root@aminglinux-02~]#curl-x127.0.0.1:80test.com/2.js2.js2.js2.js2.js2.js2.js2.js2.js2.js2.js2.js[root@aminglinux-02~]#curl-x127.0.0.1:80test.com/1.gif1.gif1.gif1.gif1.gif1.gif1.gif1.gif1.gif1.gif1.gif1.gif[root@aminglinux-02~]#!catcat/tmp/test.com.log127.0.0.1-[12/aug/2017:01:48:01+0800]test.com"/"200"-""curl/7.29.0"127.0.0.1-[12/aug/2017:01:50:13+0800]test.com"/2.jsfsdfe"404"-""curl/7.29.0"
测试结果,并没有记录测试是否有过期时间