详解Nginx服务器中的日志相关配置
nginx日志相关指令主要有两条,
log_format,用来设置日志格式,
access_log,用来指定日志文件的存放路径、格式和缓存大小
log_format格式
log_formatname(格式名字)格式样式(即想要得到什么样的日志内容)
默认的示例:
log_formatmain'$remote_addr-$remote_user[$time_local]"$request"' '$status$body_bytes_sent"$http_referer"' '"$http_user_agent""$http_x_forwarded_for"']
#注释:
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local:用来记录访问时间与时区;
$request:用来记录请求的url与http协议;
$status:用来记录请求状态;成功是200,
$body_bytes_sent:记录发送给客户端文件主体内容大小;
$http_referer:用来记录从那个页面链接访问过来的;
$http_user_agent:记录客户机,浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址;
log_formatmylogformat'$http_x_forwarded_for-$remote_user[$time_local]' '"$request"'$status$body_bytes_sent' '"$http_referer""$http_user_agent"';
用access_log指令日志文件存放路径;
用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;
access_logpath(存放路径)format(自定义日志名称)
#示例: access_loglogs/access.logmain; #我们用log_format定义了一个mylogformat的日志我们可以写成这样 access_loglogs/access.logmylogformat; #如果不想启用日志: access_logoff;
在定义日志目录中要注意的是,nginx进程设置的用户和组必须有对该路径创建文件的权限,假设nginx的usr指令设置的用户名和用户组都是www,而logs目录的用户名和组是root,那么日志文件将无法被创建;
Nginx日志切割脚本
#!/usr/bin/envpython importdatetime,os,sys,shutil log_path='/alidata/log/nginx/access/' log_file='www.wpython.com.log' yesterday=(datetime.datetime.now()-datetime.timedelta(days=1)) try: os.makedirs(log_path+yesterday.strftime('%Y')+os.sep+\ yesterday.strftime('%m')) exceptOSError,e: print printe sys.exit() shutil.move(log_path+log_file,log_path\ +yesterday.strftime('%Y')+os.sep\ +yesterday.strftime('%m')+os.sep\ +log_file+'_'+yesterday.strftime('%Y%m%d')+'.log') os.popen("sudokill-USR1`cat/alidata/server/nginx/logs/nginx.pid`")