按天生成日志

http://nginx.org/en/docs/http/ngx_http_log_module.html#access_log

nginx.conf

http {
    map $time_iso8601 $logdate {
        '~^(?<ymd>\d-\d-\d)' $ymd;
        default    'date-not-found';
    }
    access_log logs/access-$logdate.log;

#1分钟
'~^(?<ymd>\d-\d-\dT\d:\d)' $ymd;
#10分钟
'~^(?<ymd>\d-\d-\dT\d:\d)' $ymd;
#1小时
'~^(?<ymd>\d-\d-\dT\d)' $ymd;

css,js,图片不生成日志记录

log_format  main  'Status:$status,Bytes:$body_bytes_sent,IP:$remote_addr,Time:[$time_iso8601],Host:"$http_host",Request:"$request",Referer:"$http_referer",UserAgent:"$http_user_agent"';
    map $time_iso8601 $logdate {
        '~^(?<ymd>\d-\d-\d)' $ymd;
        default    'date-not-found';
    }
    map $uri $loggable {
        default 1;
        ~^(.*\.(gif|jpg|jpeg|png|bmp|swf|js|css|svg|woff|ttf|ico)$) 0;         
    }
    access_log logs/access-$logdate.log main if=$loggable;

参数详解

$http_x_forwarded_for  #客户端的真实ip通常web服务器放在反向代理的后面这样就不能获取到客户的IP地址了通过$remote_add  拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中可以增加x_forwarded_for信息用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。$remote_addr   # 远程客户端的IP地址
$remote_user  #远程客户端用户名称用于记录浏览者进行身份验证时提供的名字如果没有登录就是空白。
$time_local  #访问的时间与时区比如18/Jul/2012:17:00:01 +0800时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。
$request_method #HTTP请求方法,通常为"GET"或"POST"$scheme #请求使用的Web协议,"http" 或 "https"$host #HTTP请求行的主机名>"HOST"请求头字段>符合请求的服务器名.请求中的主机头字段,如果请求中的主机头不可用,则为服务器处理请求的服务器名称
$request_uri #这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写
$uri  #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如"/foo/bar.html"$query_string #请求中的参数值
$server_protocol #服务器的HTTP版本,通常为 "HTTP/1.0" 或 "HTTP/1.1"$status #HTTP响应代码
$body_bytes_sent #传输给客户端的字节数,响应头不计算在内;这个变量和Apache的mod_log_config模块中的"%B"参数保持兼容
$http_referer #url跳转来源,用来记录从那个页面链接访问过来的
$http_user_agent #用户终端浏览器等信息
$request_time #处理客户端请求使用的时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$upstream_addr #真正提供服务的主机地址
$request_id  #生产唯一ID方便查询问题
$upstream_response_time #请求过程中upstream的响应时间

日志说明

access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];
说明:
buffer=size #为存放访问日志的缓冲区大小
flush=time  #为缓冲区的日志刷到磁盘的时间,单位秒
gzip[=level #表示压缩级别
[if = condition]  #表示其他条件